【发布时间】:2018-12-03 11:55:43
【问题描述】:
我正在使用 addEventListener 对某些事件做出反应。
根据我的阅读,可以在同一个EventTarget上注册多个相同的EventListener,而EventListener只会被调用一次。
这是来自 MDN 的引述:
如果多个相同的 EventListener 在同一个 EventTarget 上注册了相同的参数,则重复的实例将被丢弃。它们不会导致 EventListener 被调用两次,也不需要使用 removeEventListener() 方法手动删除。但是请注意,当使用匿名函数作为处理程序时,此类侦听器将不相同,因为即使使用相同不变的源代码定义,匿名函数也不相同,只是重复调用,即使在循环中也是如此。但是,在这种情况下重复定义相同的命名函数可能会带来更多问题。 (请参阅下面的内存问题。)
我不确定为什么在这个例子中没有发生这种情况?运行此代码将调用 EventListener 两次:(Codepen here)
function _callback() { console.log("fnFunction"); }
function init() {
attachGesture("panel-anchor", _callback);
attachGesture("panel-anchor", _callback);
}
function attachGesture(sElementId, fnFunction) {
var oElement = document.getElementById(sElementId);
function foo() {
console.log("Foo");
fnFunction();
}
oElement.addEventListener("click", foo, false);
}
window.onload = init;
如何确保 EventListener 只被调用一次?
【问题讨论】:
-
只附加一次,而不是同一个监听器的两次。将调用两个侦听器(相同)
-
From what I read...你在哪里读到的? -
我在您的问题中添加了报价,因为它是重要信息
-
This Codepen 可能是您的选择
标签: javascript