我在我的一个元素上使用keydown,但是如果它不符合我的条件,我想解开它。但我使用了off()
和unbind
它似乎不起作用。警报仍然被触发,我想知道为什么。
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();
})
}
答案 0 :(得分:1)
如果删除off
中的匿名函数,它将解决您的问题。
....
} else {
$('#caption').off('keydown');
limit_lines_for_potrait();
}
答案 1 :(得分:0)
您正在使用.off()
,就像它正在侦听新事件一样,在这种情况下,函数处理程序是对取消绑定的函数的引用,而不是函数的解析取消绑定后运行。 limit_lines_for_potrait()
应该是您要删除的函数,但您的原始绑定使用了一个您无法引用的匿名函数。
假设您在同一个元素和事件上没有其他绑定,您可以将其简化为:$('#caption').off('keydown');
这将取消绑定该元素和事件类型的所有侦听器。
要在之后运行该功能,只需调用该功能:
} else {
$('#caption').off('keydown');
limit_lines_for_potrait();
}
由于unbind不是一个监听器,你不需要等待回调,它总会在下一行运行之前执行。