我试图解开一个事件。
我的活动是:
$(window).on('drop', this.onFileSelect.bind(this));
后来我:
$(window).off('drop', this.onFileSelect.bind(this));
但我仍然可以放弃。
我哪里错了?
答案 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最糟糕的解决方案)。