使用开/关事件绑定?

时间:2015-02-09 15:10:48

标签: javascript jquery

我试图解开一个事件。

我的活动是:

 $(window).on('drop', this.onFileSelect.bind(this));

后来我:

$(window).off('drop', this.onFileSelect.bind(this));

但我仍然可以放弃。

我哪里错了?

2 个答案:

答案 0 :(得分:1)

在jQuery中标识事件侦听器的推荐方法(通常用于以后删除)是使用event namespacing,在您的情况下:

$(window).on('drop.onfileselect', this.onFileSelect.bind(this));

然后:

$(window).off('drop.onfileselect');

请注意onfileselect是我选择的任意标识符,您可以提供自己的(插件)名称。

答案 1 :(得分:1)

这里的问题是bind()会返回一个新功能。因此,您尝试解除绑定的功能与您绑定的功能不同。然后jQuery无法正确解除绑定事件。

保存您的功能参考并使用该参考:

var myFn = this.onFileSelect.bind(this);
$(window).on('drop', myFn);
$(window).off('drop', myFn);

确保两个范围都可以访问该变量。


该解决方案解释了这个问题。要解决您的问题,您可以A)执行我在评论中所说的内容:$(window).off('drop')。 B)使用haim770's answer之类的命名空间。 C)使用这个答案(这是IMO最糟糕的解决方案)。