无法从document.keydown事件中取消绑定自定义处理程序

时间:2014-01-15 09:14:34

标签: javascript jquery

我将自定义处理程序绑定到`document:

keydown事件
this._bindCloseDlgEvents = function() {
    $(document).keydown(closeDlgByEscClick.bind(this));
};

我已检查并且事件已绑定:$._data( document, "events" )返回{keydown: Array[1]}。 现在我正试图取消绑定相同的处理程序:

this._unbindCloseDlgEvents = function() {
    $(document).off('keydown', closeDlgByEscClick);
};

使用$._data( document, "events" )进行检查 - 未更改任何内容{keydown: Array[1]}。 为什么这样?如果我以这种方式取消绑定$(document).off('keydown')该事件是未绑定的,但我只需取消绑定我的特定处理程序。

1 个答案:

答案 0 :(得分:1)

因为你使用.bind()它会返回一个新的匿名函数。

使用namespaced event处理程序,如

this._bindCloseDlgEvents = function() {
    $(document).on('keydown.closedialogevent', closeDlgByEscClick.bind(this));
};

然后

this._unbindCloseDlgEvents = function() {
    $(document).off('keydown.closedialogevent');
};

.bind()

  

bind()方法创建一个新函数,当被调用时,它具有它   此关键字设置为提供的值,具有给定的序列   调用新函数时提供的任何参数。

演示:Fiddle