[英]How to unbind events for specific keys
我怀疑我正在使用的一些 jQuery 插件通过绑定特定事件来干扰我的键盘箭头键按下。
假设我不在乎破坏他们正在做的任何事情,我怎么能解除所有事件的绑定,比如左右箭头键按下?
如何调试或查看按键触发的事件列表? (我不知道哪些代码行当前正在处理按键操作,如果有的话)
您可以在不影响其他绑定按键事件的情况下解除绑定:
$(document).unbind("keypress.key37");
$(document).unbind("keypress.key39");
这称为命名空间事件,即使用<event_name>.<namespace>
标记特定绑定(在您的情况下,“keypress.key37 & keypress.key39”)。
如果当您将焦点放在页面上的任何位置时触发箭头键,则事件处理程序可能绑定到窗口或文档,如下所示解除绑定:
$(window).unbind('keydown');
$(document).unbind('keydown');
如果您只想为“向左”或“向右”箭头键解除绑定事件,您可以像这样停止事件:
$(window).bind('keydown', function(e){
switch(e.keyCode) {
case 37: // left arrow
e.preventDefault;
e.stopPropagation;
break;
case 39: // right arrow
e.preventDefault;
e.stopPropagation;
break;
}
});
我建议调试以找到这些事件的绑定位置(或者即使它们被绑定)。 如果这些与 jQuery 绑定,它们将可以通过 .data() 看到;
例如,在控制台中:
$('.suspected.element').data().events
如果关键事件确实是通过某个插件引起的,我会考虑修改事件的绑定,而不是添加解决方法。
function stopRKey(evt) {
var evt = (evt) ? evt : ((event) ? event : null);
var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement :null);
if ((evt.keyCode == 13) && (node.type=="text")) {return false;}
}
document.onkeypress = stopRKey;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.