Jquery 如何阻止键控事件干扰表单字段?

Jquery 如何阻止键控事件干扰表单字段?,jquery,keypress,keydown,Jquery,Keypress,Keydown,我已将一些事件绑定到左右箭头键上,如下所示: $(document).keydown(function(e) { switch(e.which) { case 39: $("#next").trigger('click'); break; case 37: $("#prev").trigger('click'); break; } }); 然而,很明显,如果您处于表单中,并按左键和右键

我已将一些事件绑定到左右箭头键上,如下所示:

$(document).keydown(function(e) {
    switch(e.which) {
        case 39: $("#next").trigger('click');
        break;

        case 37: $("#prev").trigger('click');
        break;              
    }
});
然而,很明显,如果您处于表单中,并按左键和右键在文本中移动,则会触发这些事件


如何更改此设置以避免发生这种情况?

您可以检查事件的目标()

或者,可以通过将事件处理程序附加到输入元素来防止事件冒泡:

$('input').keydown(function(e) {
    e.stopPropagation();
});
更新:

同样,您可能需要测试
TEXTAREA
的节点名


下面是一个例子:

这是我能找到的最优雅的解决方案:

$(document).ready(function() {
  $(document).keypress(function() {
    if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) || event.target.type === "text") ) {
      return;
    }

    // deal with the events here
    ...

  }); 
});

你到底想发生什么?
if (e.target.closest('form').length===0) {
    // keypress did not occur inside a form. handle it.
}
$(document).ready(function() {
  $(document).keypress(function() {
    if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) || event.target.type === "text") ) {
      return;
    }

    // deal with the events here
    ...

  }); 
});