我想知道是否有一种优雅的方法可以在不影响类似事件的情况下从HTML元素中删除特定的事件侦听器。

例如

var a = {
  addEvent: function(){
     $('body').on('click', function(){
      //does something here.
     });
  }
}

var b = {
  addEvent: function(){
     $('body').on('click', function(){
      //does something else here.
     });
   }
}

a.addEvent();
b.addEvent();

因此,问题是:如何在不删除a的事件的情况下删除对象b的单击事件?
$('body').off('click'); //removes both event listeners

我认为大多数方法都会杀死这两个听众。很高兴看到任何优雅的回应。

最佳答案

一种选择是namespace the events:

var a = {
  addEvent: function(){
     $('body').on('click.a', function(){
       //does something here.
     });
  }
}

var b = {
  addEvent: function(){
     $('body').on('click.b', function(){
       //does something here.
     });
   }
}

a.addEvent();
b.addEvent();

$('body').off('click.a'); //removes the a event listener

09-13 01:35