5

我已经绑定了一些事件发生在左右箭头键上,如下所示:

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

        case 37: $("#prev").trigger('click');
        break;              
    }
});

但是,显然,如果您在表单中并按左右键在文本中移动,则会触发这些事件。

我该如何改变它以使这种情况不会发生?

4

3 回答 3

12

您可以检查事件的目标(更多信息在这里

$(document).keydown(function(e) {
    //var target = (e.target) ? e.target : e.srcElement; // IE uses srcElement
    // jQuery seems to handle this, so e.target should be fine

    if(e.target.nodeName != 'INPUT') {
        switch(e.which) {
            case 39: $("#next").trigger('click');
            break;

            case 37: $("#prev").trigger('click');
            break;              
        }
    }
});

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

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

更新:

同样,您可能想要测试TEXTAREA.

这是一个例子:http: //jsfiddle.net/86CKw/1/

于 2010-08-05T13:38:33.720 回答
2

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

$(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
    ...

  }); 
});
于 2013-03-13T12:03:48.000 回答
0
if (e.target.closest('form').length===0) {
    // keypress did not occur inside a form. handle it.
}
于 2010-08-05T13:39:52.757 回答