键盘事件,如果没有输入

时间:2013-07-26 22:16:30

标签: jquery events exception if-statement key

我的网站上有以下jQuery事件

    $(window).keyup (function(event) {
        switch (event.keyCode) {
            case 68:  // Alt-N = next
                scroll ('next');
                break;
            case 65:  // Alt-P = prev
                scroll ('prev');
                break;

        }

});

});

 <script>
    $(document).keydown(function(e) {
    if(e.keyCode==68){
        window.location.href = "{PreviousPost}";
    }
    });
</script>

我正在使用窗口和文档,因为它们的工作和搜索都没有让我发现功能方面的差异。但无论如何,我想知道的是如何在输入字段中保持函数不被触发。因为它的工作原理和一切,但我不希望当用户只是在他们按键时键入并且......没有打字时才触发事件。

看起来很简单,但我真的在搜索。保持给我其他问题的结果。

2 个答案:

答案 0 :(得分:5)

事件:

if ($(e.target).closest("input")[0]) {
    return;
}

它的作用是查看目标是否来自或通过input元素并返回而不执行任何操作(如果是这样)。更多:closest | event.target您对其他案例的逻辑将遵循,例如:

$(document).keydown(function(e) {
    if ($(e.target).closest("input")[0]) {
        return;
    }
    if(e.keyCode==68){
        window.location.href = "{PreviousPost}";
    }
});

N.B。 - 如果您还要过滤掉select个元素,那么:$(e.target).closest("input, select")(依此类推,例如button元素)。

答案 1 :(得分:1)

事件已包含目标对象,因此我们可以这样检查:

if($(event.target).is('input,select,button')) return;

我们将对象event.target放在$()中以引用DOM元素。我们可以检查元素的类型或我们需要的任何内容(例如.hasClass()