如何阻止keydown事件干扰表单字段?

Ric*_*haw 4 jquery keypress keydown

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

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

        case 37: $("#prev").trigger('click');
        break;              
    }
});
Run Code Online (Sandbox Code Playgroud)

但是,很明显,如果您在表单中并按左右键来浏览文本,则会触发这些事件.

我如何改变这一点,以免发生这种情况?

Fel*_*ing 11

您可以查看活动的目标(更多信息,请点击此处)

$(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;              
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

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

$('input').keydown(function(e) {
    e.stopPropagation();
});
Run Code Online (Sandbox Code Playgroud)

更新:

同样,您可能希望测试节点名称TEXTAREA.

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