使用开/关事件绑定

Using on/off event bindings?

本文关键字:事件 绑定      更新时间:2023-09-26

我正在尝试解除事件绑定。

我的活动是:

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

稍后I:

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

但我仍然可以摔倒。

我哪里错了?

在jQuery中识别事件侦听器的推荐方法(通常用于稍后删除)是使用事件名称空间,在您的情况下:

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

然后:

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

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

这里的问题是bind()返回了一个新函数。因此,您试图解除绑定的函数与您正在绑定的函数不同。jQuery随后无法正确解除事件绑定。

保存您的函数的引用并使用该引用:

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

请确保两个作用域都可以访问该变量。


这个解决方案解释了这个问题。为了解决你的问题,你可以按照我在评论中说的做:$(window).off('drop')。B) 使用类似haim770答案的名称空间。C) 使用这个答案(这是IMO最糟糕的解决方案)。