0

我怀疑我正在使用的一些 jQuery 插件通过绑定特定的事件来干扰我的键盘箭头按键。

假设我不在乎破坏他们正在做的任何事情,我怎样才能解除所有事件的绑定,例如,左右箭头键按下?

如何调试或查看按键时触发的事件列表?(我不知道哪些代码行当前正在处理按键,如果有的话)

4

4 回答 4

1

您可以取消绑定,而不会影响其他绑定的按键事件:

$(document).unbind("keypress.key37");
$(document).unbind("keypress.key39");

这称为命名空间事件<event_name>.<namespace>,即使用(在您的情况下为“keypress.key37 & keypress.key39”)标记特定绑定。

于 2012-12-18T06:14:54.397 回答
0

如果当您聚焦页面上的任何位置时触发箭头键,则事件处理程序可能已绑定到窗口或文档,解绑如下:

$(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;
    }
});
于 2012-12-18T05:56:35.327 回答
0

我建议调试以查找这些事件的绑定位置(或者即使它们已绑定)。如果这些与 jQuery 绑定,它们将可以通过 .data(); 查看。

例如,在控制台中:

$('.suspected.element').data().events

如果关键事件确实是某个插件的原因,我会考虑修改事件的绑定,而不是添加解决方法。

于 2012-12-18T06:06:24.880 回答
-1
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;
于 2020-02-12T03:14:43.353 回答