如何使用jQuery取消绑定所有事件


73

我可以使用此代码删除点击事件,

$('p').unbind('click')

但是,有某种方法可以删除所有事件吗?

有一个unbindAll在jquery中命名的方法?

谢谢


值得将您接受的答案从Nick的答案更改为totallyNotLizards,因为.unbind()已弃用了。
Clonkex

Answers:


101

您可以.unbind()不带参数调用来执行此操作:

$('p').unbind();

文档

在最简单的情况下,不带任何参数,.unbind()将删除所有附加到元素的处理程序。


7
如果'p'有一些子元素,此语句是否也将那些监听器取消绑定?
弗里申克

84

从jQuery 1.7开始,off()并且on()是绑定和取消绑定事件处理程序的首选方法。

因此,要从元素中删除所有处理程序,请使用以下命令:

$('p').off();

或针对特定处理程序:

$('p').off('click hover');

并添加或绑定事件处理程序,您可以使用

$('p').on('click hover', function(e){
    console.log('click or hover!');
});

31
如果要从页面中删除所有绑定,可以致电$(document).add('*').off();
2013年

$(document).add('ID_OF_THE_ELEMENT')。off(); 帮助了我..谢谢@flu
Mohit Singh

3
@Moitt Glad我可以帮忙。请注意,在您的情况下,您可以$('#ELEMENT_ID').off()直接使用。
2015年

是的,我忘了提到'#'<-井号..我的坏grrrrrrrrrrrrrrrrrrrrrr ...谢谢@flu
Mohit Singh

1
@Moitt是的,那也是;)但是我在谈论 $(document).add(...)部分。您不需要节点列表中的文档。如果您只想删除您知道其ID的特定元素上的所有事件,则可以立即使用$('#ELEMENT_ID').off()(在其前面没有添加任何内容)。
流感

2

@jammypeach是打开和关闭是可以使用的公认方法。解除绑定有时会导致产生怪异的行为(例如,实际上并未正确地解除绑定事件)。

要取消绑定正文中的所有元素,请找到所有元素,并为每个元素关闭点击处理程序(原来的取消绑定):

$("body").find("*").each(function() {
    $(this).off("click");
});

另请参阅如何保存在此堆栈溢出问题中已关闭的事件。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.