我怀疑我正在使用的一些 jQuery 插件通过绑定特定的事件来干扰我的键盘箭头按键。
假设我不在乎破坏他们正在做的任何事情,我怎样才能解除所有事件的绑定,例如,左右箭头键按下?
如何调试或查看按键时触发的事件列表?(我不知道哪些代码行当前正在处理按键,如果有的话)
我怀疑我正在使用的一些 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;