如何删除eventlisener中定义的函数的eventlistener?

时间:2016-06-26 13:24:51

标签: javascript jquery html addeventlistener

我在事件监听器中定义了具有函数的事件监听器:

$("body")[0].addEventListener( "click", function my3(){alert(786)});

现在,当我尝试将此事件清除程序删除为:

$("body")[0].removeEventListener( "click", function my3);

我收到my3未定义的错误。有没有办法删除这些类型的eventlisteners或在事件监听器之外定义my3函数是唯一的方法?。

2 个答案:

答案 0 :(得分:4)

  

有没有办法删除这些类型的eventlisteners ......

不,不是addEventListener / removeEventListener。但是你已经标记了,所以请继续阅读,因为你可以使用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维护自己的事件处理程序列表而不是使用本机DOM的列表。这意味着您可以删除所有使用jQuery从元素附加的事件的处理程序,而无需引用它们,和/或使用jQuery的“namespaced”事件来删除它们的一部分,同样无需引用它们

例如:

$("body").on("click.foo", function my3() { alert(786); });

在那里,我们使用foo“命名”了我们的点击处理程序。稍后,我们可以删除我们的处理程序,而不会影响任何其他点击处理程序:

$("body").off("click.foo");

onoff的文档中的详细信息。

答案 1 :(得分:0)

另一种选择是使用.onclick,您可以使用document.body.onclick = null删除处理程序