我在事件监听器中定义了具有函数的事件监听器:
$("body")[0].addEventListener( "click", function my3(){alert(786)});
现在,当我尝试将此事件清除程序删除为:
$("body")[0].removeEventListener( "click", function my3);
我收到my3
未定义的错误。有没有办法删除这些类型的eventlisteners或在事件监听器之外定义my3
函数是唯一的方法?。
答案 0 :(得分:4)
有没有办法删除这些类型的eventlisteners ......
不,不是addEventListener
/ removeEventListener
。但是你已经标记了jquery,所以请继续阅读,因为你可以使用jQuery。
...或者在事件监听器之外定义my3函数是唯一的方法吗?
这是addEventListener
/ removeEventListener
的唯一方法。您需要引用添加的功能以便将其删除。所以:
// Declare the function
function my3() {
alert(786);
}
// Add it
$("body")[0].addEventListener( "click", my3);
// Later, remove it
$("body")[0].removeEventListener( "click", my3);
你已经标记了你的问题jquery,所以我会注意到jQuery附加的处理程序的不是,因为jQuery维护自己的事件处理程序列表而不是使用本机DOM的列表。这意味着您可以删除所有使用jQuery从元素附加的事件的处理程序,而无需引用它们,和/或使用jQuery的“namespaced”事件来删除它们的一部分,同样无需引用它们
例如:
$("body").on("click.foo", function my3() { alert(786); });
在那里,我们使用foo
“命名”了我们的点击处理程序。稍后,我们可以删除我们的处理程序,而不会影响任何其他点击处理程序:
$("body").off("click.foo");
答案 1 :(得分:0)
另一种选择是使用.onclick
,您可以使用document.body.onclick = null
删除处理程序