我有一个听众:
preUpdate-Event
我试图弄清楚如何动态删除它。挑战在于我真的希望ebClose接收mpClose作为回调函数,因为在其他情况下ebClose会收到不同的回调函数。
ebClose的作用是:
$(document).on("keypress", function(e){ebClose(e,mpClose)});
也就是说,它检查它是否是function ebClose(e, callback){
if (e.which == 13){
callback();
}
}
密钥,然后调用回调函数。理论上,我可以制作10个不同版本的ebClose并粘贴在不同的函数中以避免需要回调,但似乎它是很多代码。有什么建议可以让策略在需要时删除这个监听器吗?
这显然不起作用:
enter
如果我改成它:
$(document).off("keypress", function(e){ebClose(e,mpClose)});
然后我可以删除它,但不知道如何传递回调。谢谢你的建议。
答案 0 :(得分:2)
一个选项是namespace the events。
// Attach a keypress event namespaced to 'ebclose'
$(document).on("keypress.ebclose", function(e) {
ebClose(e, mpClose)
});
// Remove the namespaced event:
$(document).off("keypress.ebclose");
或者,您也可以使用$.proxy()
来绑定函数:
$(document).on("keypress", $.proxy(ebClose, this, mpClose));
function ebClose(callback, e){
if (e.which == 13){
callback();
}
}
function mpClose () {
alert('Remove the event listener');
$(document).off("keypress", $.proxy(ebClose, this, mpClose));
}
或者,类似地,您可以使用.bind()
method:
$(document).on("keypress", ebClose.bind(this, mpClose));
function ebClose(callback, e){
if (e.which == 13){
callback();
}
}
function mpClose () {
alert('Remove the event listener');
$(document).off("keypress", ebClose.bind(this, mpClose));
}