解除原型结构中的单个事件的绑定

时间:2015-10-13 12:12:13

标签: javascript jquery

我正在尝试取消绑定已添加到对象原型的事件处理程序。有问题的(缩减)代码是:

MyClass.prototype.bindEvents = function() {
  var thisObj = this;
  this.$tabs.on("click", function(e) {
    return thisObj.handleTabClick($(this), e);
  });
}

MyClass.prototype.unbindEvents = function() {
  this.$tabs.off("click", this.handleTabClick);
}

MyClass.prototype.handleTabClick = function($tab, e) {
  // do something
}

我知道我可以(并且确实)通过

完成清除点击事件
this.$tabs.off("click");

但是我希望保留另一个事件处理程序。

如何在原型结构中取消绑定单个事件?

1 个答案:

答案 0 :(得分:0)

您可以在创建事件时为事件添加命名空间,然后在删除事件处理程序时可以专门引用该事件。试试这个:

MyClass.prototype.bindEvents = function() {
    var thisObj = this;
    this.$tabs.on("click.foo", function(e) {
        return thisObj.handleTabClick($(this), e);
    });
}

MyClass.prototype.unbindEvents = function() {
    this.$tabs.off("click.foo");
}

有关详细信息,请参阅http://api.jquery.com/on/

的“事件名称和命名空间”部分

另请注意,将单击处理程序通过匿名函数传递给handleTabClick函数的方法是多余的,您只需执行此操作:

this.$tabs.on("click.foo", thisObj.handleTabClick);

MyClass.prototype.handleTabClick = function(e) {
    var $tab = $(this); 
    // do something
}