我怀疑我正在使用的一些jquery插件通过绑定特定事件来干扰我的键盘箭头按键。
假设我不关心打破他们正在做的事情,我怎么能解除所有事件,例如左右箭头按键?
如何调试或查看按键时触发的事件列表? (我不知道哪些代码行正在处理按键,如果有的话)
答案 0 :(得分:1)
您可以在不影响其他绑定按键事件的情况下取消绑定:
$(document).unbind("keypress.key37");
$(document).unbind("keypress.key39");
这称为namespaced events,即使用<event_name>.<namespace>
标记特定绑定(在您的情况下,“keypress.key37&amp; keypress.key39”)。
答案 1 :(得分: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;
}
});
答案 2 :(得分:0)
我建议调试以查找这些事件的绑定位置(或者即使它们已绑定)。如果它们与jQuery绑定,则可以通过.data();
查看它们例如,在控制台中:
$('.suspected.element').data().events
如果关键事件确实是通过某个插件引起的,我会考虑修改事件的绑定,而不是添加变通方法。
答案 3 :(得分:-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;