首页 > 解决方案 > Jquery:删除事件处理程序(例如'cklick'),但保留其他事件处理程序(用于'click')

问题描述

如果有一个小的 jsfiddle 示例: https ://jsfiddle.net/skmqjwt7/

我有多个事件监听器。所有监听相同的事件(button.a click in the fiddle example)。现在我想断开一个事件侦听器,但我不想(!)断开所有事件侦听器并重新连接我想保留的那些。

我有多个类,它们有一些事件监听器,我只想断开一个类的事件监听器。

class a{
...stuff
   $('#main').on('bla', function(e){
     ...stuff
   });
}
class b{
...stuff
   $('#main').on('bla', function(e){
     ...stuff
   });
   function disconnectMe()
   {
      //disconnect B on('bla')
   }
}

B 类不知道 A(或任何其他可能监听该事件的类)。所以我只想删除 B 的事件监听器,同时保持所有其他类的事件监听器活着。

我无法在全球范围内处理这种断开连接,例如:

$('#main').off();
a.reconnect();
c.reconnect();

在我的情况下,B 类只是从后端获取数据,并决定停止自行监听事件。

这可能吗?在我目前的情况下,在 $(document) 上触发了一个自定义事件,并且任何其他 javascript 类都能够监听,但我不知道如何只删除一个监听器。

标签: javascriptjqueryeventstriggersunbind

解决方案


unbind() 方法是 jQuery 中的一个内置方法,用于删除任何选定的事件处理程序。此方法可用于删除特定事件处理程序,或停止特定功能。它适用于使用事件对象的任何事件处理程序。

注意:如果未提供参数,则该方法适用于指定元素的所有事件处理程序。句法:

$(selector).unbind(event, function, eventObj)

参数:此方法接受上面提到的三个参数,如下所述: event:它是一个可选参数,用于指定事件(一个或多个)以从元素中删除它们。function:它是一个可选参数,用于指定要与元素的指定事件解除绑定的函数的名称。eventObj:它是一个可选参数,用于指定要从事件绑定函数中删除的事件对象。


推荐阅读