jQuery off()和bind(this)

时间:2013-12-06 19:54:06

标签: javascript jquery bind

我正在尝试从元素中删除事件处理程序,附加jQuery的on()并使用off()将其删除。这通常会起作用,但在这种情况下,它没有做任何事情。

this.element.on('click', this.handler);
this.element.off('click', this.handler);

这样可行,但在我的情况下,由于将范围绑定到处理程序,它无效。

this.element.on('click', this.handler.bind(this));
this.element.off('click', this.handler.bind(this));

由于范围被绑定到处理程序,off方法无法从元素中分离事件。

我尝试过使用引用,如下所示:

var self = this;
this.element.on('click', this.handler.bind(self));
this.element.off('click', this.handler.bind(self));

但没有运气......有人有想法解决这个问题吗?

2 个答案:

答案 0 :(得分:5)

存储对单个函数的引用的替代解决方案是使用命名空间事件。

this.element.on('click.iamspecial', this.handler.bind(this));
this.element.off('click.iamspecial');

答案 1 :(得分:2)

我会尝试将显式绑定的东西作为参考:

var h = this.handler.bind(this);
this.element.on('click', h);
this.element.off('click', h);