我将自定义处理程序绑定到`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')
该事件是未绑定的,但我只需取消绑定我的特定处理程序。
答案 0 :(得分:1)
因为你使用.bind()
它会返回一个新的匿名函数。
使用namespaced event处理程序,如
this._bindCloseDlgEvents = function() {
$(document).on('keydown.closedialogevent', closeDlgByEscClick.bind(this));
};
然后
this._unbindCloseDlgEvents = function() {
$(document).off('keydown.closedialogevent');
};
bind()方法创建一个新函数,当被调用时,它具有它 此关键字设置为提供的值,具有给定的序列 调用新函数时提供的任何参数。
演示:Fiddle