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