是否可以删除附加到元素及其子元素的所有事件

时间:2010-11-08 10:07:15

标签: jquery

我需要能够删除附加到元素及其所有子元素的事件,即使我不知道这些事件是什么。所有事件都使用jquery附加。

4 个答案:

答案 0 :(得分:25)

对于jQuery 1.8及更高版本,请使用

$(element).find("*").addBack().off();

addBack()$(element)中的原始元素列表添加回jQuery对象持有的元素的内部集合(find("*")返回的元素)。 off()删除所有附加的事件处理程序,包括使用委派的事件处理程序。

如果您只想要孩子而不是所有后代,请使用

$(element).children().addBack().off();

参见文档:


对于jQuery 1.7及更低版本,请使用andSelf()代替addBack()。对于jQuery 1.6及更低版本,请使用unbind()die()代替off()。例如:

$(element).children().andSelf().unbind().die();

答案 1 :(得分:2)

andSelf()函数已弃用。

使用add()函数:

$(element).add("*").off();

答案 2 :(得分:0)

对元素使用.unbind()方法。

答案 3 :(得分:0)

这不是答案,但值得一提。

我使用了没有destroy方法的第三方插件。我找到了这个解决方案,但直到我开始深入研究文档之前它才开始工作。

请注意,如果插件正在您的对象上创建$(document).on(event, handler)侦听器,则必须通过编写$(document).off(event, 'element, element *')来删除该操作。如果主要监听器是$(element).find("*").addBack().off();,那么简单地写document将不起作用。