当输入处于焦点时防止按键事件触发

mcb*_*eav 4 javascript jquery event-handling javascript-events

我目前正在使用一个开关来在按下某个键时触发一些代码。这不是确切的代码,但它基本上是我正在使用的代码(这只是为了在此处保持简短和简单。)

$(document).keydown(function(e) {
switch(e.keyCode) { 

case 39:
e.preventDefault();
    alert("Arrow Key");

break;

case 37:
   e.preventDefault();
    alert("Arrow Key");
}
});
Run Code Online (Sandbox Code Playgroud)

当输入框处于焦点时,如何防止事件触发?

lon*_*day 7

我认为您的意思是您只想e.preventDefault()在目标元素不是input标签时才这样做。你可以这样做:

$(document).keydown(function(e) {
    if (e.target.nodeName.toLowerCase() !== 'input') {
        switch(e.keyCode) { 
            case 39:
                e.preventDefault();
                alert("Arrow Key");

                break;

            case 37:
                e.preventDefault();
                alert("Arrow Key");
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

e.target是事件发生的元素。或者,您可以使用 jQuery 的事件委托 API:

$(document).delegate(':not(input)', 'keydown', function(e) {
    switch(e.keyCode) { 
        case 39:
            e.preventDefault();
            alert("Arrow Key");

            break;

        case 37:
            e.preventDefault();
            alert("Arrow Key");
    }
});
Run Code Online (Sandbox Code Playgroud)

编辑更新了我的答案,以进行“不是输入”而不是“是输入”检查。