从选择器中移除keydown事件不起作用
remove event of keydown from selector doesn't work?
我在其中一个元素上使用了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();
})
}
如果您删除off
中的匿名函数,它将解决您的问题。
....
} else {
$('#caption').off('keydown');
limit_lines_for_potrait();
}
您正在使用.off()
,就好像它正在监听一个新事件一样,在这种情况下,函数处理程序是对要解除绑定的函数的引用,而不是在解除绑定后运行的函数。limit_lines_for_potrait()
应该是你想要删除的函数,但是你原来的绑定使用了一个你不能引用的匿名函数。
假设您在同一元素和事件上没有其他绑定,您可以将其简化为:$('#caption').off('keydown');
,这将取消该元素和事件类型的所有侦听器的绑定。
之后运行函数,只需调用该函数:
} else {
$('#caption').off('keydown');
limit_lines_for_potrait();
}
由于unbind不是侦听器,因此不需要等待回调,它将始终在下一行运行之前执行。
相关文章:
- 阻止浏览器对keydown事件作出反应,但不取消该事件
- IE9-添加和删除DOM元素会破坏父keydown事件
- 在文本区域禁用javascript定义的keydown事件并恢复默认行为
- 在Chrome中模拟keydown事件
- 使用Keydown事件移动对象
- 如何在不干扰网站其他部分的情况下,在画布上捕捉keydown事件
- HTML jQuery 函数在 Keydown 事件上不起作用
- 输入字段未使用 ng-keydown 事件更新
- angularjs的ng keydown事件,按下哪个键的值,然后显示按下的键的值
- background.js正在捕获textbox的keydown事件
- 当我更新HTML时,Keydown事件停止触发
- 为什么我的引导工具提示的标题只会随着jQuery中的keydown事件而更改一次
- 使用AngularJS对超快速keyup和keydown事件调用函数
- d3:拦截特定元素上的keydown事件
- Javascript ActiveElement和Keydown事件侦听器
- 在Firefox中的keydown事件中隐藏元素时焦点顺序错误
- Javascript 'keydown' 事件侦听器不起作用
- 同时在 JavaScript 中使用 keyup/keydown 事件
- 如何使用 Keydown 事件在多种语言/键盘布局中获取正确的字符
- 触发警报的JS(Jquery).keydown事件