javascript 使用true调用addEventListener()时removeEventListener()不工作

inkz8wg9  于 2023-04-04  发布在  Java
关注(0)|答案(1)|浏览(131)

我正在自学JavaScript,遇到了一种情况,如果我在捕获和冒泡阶段调用事件侦听器,删除该侦听器将不起作用。

function clickHandler(e, objId, num) {
  var obj = document.getElementById(objId);
  obj.innerHTML = "DIV " + num + " says " + " at X position: " + e.screenX;
}

function wrapperOne(e) {
  clickHandler(e, "heading", 1);
  e.target.removeEventListener('click', wrapperOne);
}

function wrapperTwo(e) {
  clickHandler(e, "heading", 2);
  e.target.removeEventListener('click', wrapperTwo);
}

function onloadHandler() {
  document.getElementById("div1").addEventListener('click', wrapperOne, true);
  document.getElementById("div2").addEventListener('click', wrapperTwo, true);
}

有了这段代码,我可以继续调用wrapperOnewrapperTwo,即使在调用removeEventListener函数之后。如果我在onloadHandler中的addEventListener中传递false,那么事件处理程序确实会被删除。有人能解释这两种不同的行为吗?

vecaoik1

vecaoik11#

使用e.target.removeEventListener('click', wrapperOne, true);
addEventListenerremoveEventListener的第三个参数是useCapture参数。
当你在addEventListener中使用false时,removeEventListener工作的原因是因为falseuseCapture参数的默认值。如果你在“捕获”阶段附加了一个事件,那么你必须告诉它从“捕获”阶段删除该事件。
有关详细信息,请参见https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener

相关问题