我可以在jquery插件命名空间中取消绑定事件,而不仅仅是事件命名空间吗?

时间:2015-08-12 13:28:32

标签: javascript jquery events namespaces

我想将所有jQuery代码包装在一个名为init()的函数中。定义此函数,然后立即执行。然后,我也在窗口调整大小时使用init()。

$(document).ready(function(){
  function init(){
    ...

    $('.button').click(function(){
      $(this).toggleClass('.active');
    });

    ...
  };

  init();

  $(window).resize(function(){
    init();
  });

});

麻烦的是每次窗口调整大小时都会创建一个新的事件监听器。当您尝试在点击时切换某些内容时,这会成为问题。如果有偶数个听众,则切换发生两次,使整个考验无效。

我的下一步是尝试在init()函数的开头取消绑定所有事件:

$('*').unbind();

这成功重置了所有事件绑定,并确保在调整窗口大小后只剩下一个侦听器。但是,它杀死了其他插件和文件中使用的任何其他jQuery代码。

我相信只解释我脚本事件的解决方案,可以通过命名空间来实现。但是,我不想让人们必须记住使用.on()和click.namespace',特别是如果他们喜欢使用.click(function(){。 ..});因此事件名称空间并不是真正需要的。

我真正想要的是一种基于插件级命名空间禁用所有事件的方法。有任何想法吗?至少,有没有办法扩展click函数以便正常运行,但是将它应用的所有选择器放入一个我可以在以后引用的数组中?

谢谢!

0 个答案:

没有答案