我正在尝试取消绑定已添加到对象原型的事件处理程序。有问题的(缩减)代码是:
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");
但是我希望保留另一个事件处理程序。
如何在原型结构中取消绑定单个事件?
答案 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
}