【问题标题】:how to unbind all event using jquery如何使用jquery取消绑定所有事件
【发布时间】:2011-04-03 22:05:12
【问题描述】:

我可以使用这段代码来移除点击事件,

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

但是,有一些方法可以删除所有事件吗?

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

谢谢

【问题讨论】:

  • 值得将您接受的答案从 Nick 的答案更改为完全NotLizards 的答案,因为 .unbind() 已被弃用。

标签: jquery events unbind


【解决方案1】:

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

$('p').unbind();

来自the docs

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

【讨论】:

  • 如果 'p' 有一些子元素,该语句是否也会解除对这些子元素的绑定?
【解决方案2】:

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

所以要从元素中删除所有处理程序,请使用:

$('p').off();

或者对于特定的处理程序:

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

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

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

【讨论】:

  • 如果您想从页面中删除所有绑定,您可以致电$(document).add('*').off();
  • $(document).add('ID_OF_THE_ELEMENT').off();帮助了我..谢谢@flu
  • @Moitt 很高兴我能帮上忙。请注意,在您的情况下,您可以直接使用 $('#ELEMENT_ID').off()
  • 是的,我忘了提到'#'
  • @Moitt 是的,也是;)但我说的是$(document).add(...) 部分。您不需要节点列表中的文档。如果您只是想删除某个您知道其 ID 的特定元素上的所有事件,那么您可以立即使用$('#ELEMENT_ID').off()(前面没有添加任何内容)。
【解决方案3】:

@jammypeach 关于 on & off 是公认的使用方法是正确的。解除绑定有时最终会产生奇怪的行为(例如,实际上没有正确解除绑定事件)。

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

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

另请参阅如何保存您在 this stack overflow question 中关闭的事件。

【讨论】:

    【解决方案4】:

    从包括文档使用在内的所有元素中删除所有事件绑定:

    $(document).off().find("*").off();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      相关资源
      最近更新 更多