从选择器中删除keydown事件不起作用?
我在我的一个元素上使用了keydown,但是如果它不适合我的情况,我想解除它。但我用off()
和unbind
它似乎没有工作。仍然被触发的警报,我想知道为什么。从选择器中删除keydown事件不起作用?
if (imgDOM.naturalWidth > imgDOM.naturalHeight) {
$('#caption').attr('maxlength', 220);
$("#caption").keydown(function(e) {
if ((e.keyCode == 10 || e.keyCode == 13)) {
e.preventDefault();
alert('Landscape photo is allowed to have only single line of message.');
return false;
}
});
} else {
$('#caption').off('keydown', function() { //this won't work
limit_lines_for_potrait();
})
}
您使用.off()
,如果它在听一个新的事件,在这种情况下,函数处理程序是refernce的功能取消绑定,而不是在那个时候解除绑定后运行的功能。 limit_lines_for_potrait()
应该是你想要删除的函数,但是你的原始绑定使用了一个你不能引用的匿名函数。
假设您对同一元素和事件没有其他绑定,可以将其简化为:$('#caption').off('keydown');
这将解除绑定该元素和事件类型的所有侦听器。
后运行该功能,只需调用该函数:
} else {
$('#caption').off('keydown');
limit_lines_for_potrait();
}
由于解除绑定不是一个倾听者,你不需要等待回调,它总是先下一执行线路运行。
我想删除keydown绑定,并运行limit_lines_for_potrait –
@MariaJane我已经更新了答案,您可以简单地在解除绑定事件后手动运行该函数(如vher2所示)解除绑定不是一个监听器,你不需要等待回调,它会在下一行运行 – DBS
之前被执行,但是为什么回调没有按照它的方式工作? –
如果您删除off
中的匿名函数,它将解决您的问题。
....
} else {
$('#caption').off('keydown');
limit_lines_for_potrait();
}
关闭没有回拨? –
这不是一个回调,解释@DBS – vher2
也许这种情况'if(imgDOM.naturalWidth> imgDOM.naturalHeight){'永远是真的。 – vher2
@ vher2不,当然。 –