在下面的屏幕截图中,有人可以解释一下为什么必须将函数“一次”传递给button.removeEventListener(“ click”,一次)吗?我们是否仅通过removeEventListener方法需要两个参数来传递它?另外,给定“一次”功能也传递到removeEventListener方法中,“完成”没有多次被控制台记录似乎很奇怪。

javascript -  Eloquent JavaScript中的removeEventListener示例-LMLPHP



let button = document.getElementById("button");

function once() {
  console.log("Done");
  button.removeEventListener("click", once);
}
button.addEventListener("click", once);

<button id="button">once</button>

最佳答案

当您只想取消绑定特定的处理程序时(例如,您要取消绑定once处理程序),则需要将其作为第二个参数传递,否则JS将不知道要删除哪个处理程序。

每个事件可以绑定多个处理程序。


  另外,给定“一次”功能也传递到removeEventListener方法中,“完成”没有多次被控制台记录似乎很奇怪。


这就是为什么只调用一次的原因。您在那里传递了函数once的引用,因此JS知道要解除绑定的处理程序。当您调用removeEventListener时,它不会调用它。

一旦用户单击按钮,该函数便被调用,在处理程序中有此console.log,并且此后它将自动取消注册,因此以后的单击将不再触发该函数。

关于javascript - Eloquent JavaScript中的removeEventListener示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46988326/

10-11 12:05