【问题标题】:Keypress event if NOT input未输入时的按键事件
【发布时间】:2013-07-26 22:16:29
【问题描述】:

我的网站中有以下 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>

我正在使用窗口和文档,因为它们都可以工作并且搜索并没有让我发现在功能方面有什么区别。但无论如何,我想知道的是如何防止函数在输入字段中被触发。因为它的工作原理和一切,但我不希望事件在用户仅在按下键并且......不打字时才触发。

看起来很简单,但我真的搜索过了。不断给我其他问题的结果。

【问题讨论】:

    标签: jquery events exception if-statement key


    【解决方案1】:

    在事件中:

    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}";
        }
    });
    

    注意- 如果您还想过滤掉select 元素,则:$(e.target).closest("input, select")(依此类推,例如button 元素)。

    【讨论】:

    • 感谢您的快速回答。我对 jQuery 的了解有限,但这看起来确实是我需要的。但是,添加它会使一切停止工作。如果你愿意,我可以放一个 jsfiddle。
    • 你这里为什么用最接近(),我不明白?
    • @roasted:公平点,input 不能包含其他元素。 select 可以(options),但我不知道按键是否对他们有用。当然button可以,但是OP专门说input,所以...我基本上是在概括。
    • 这里是 jsfiddle.net/39yUG/4 。只有当我删除你的行时它才有效。
    • @TonyFire:我没有在那个小提琴中看到input 元素。但是我的回答有一个错字(if 的结束 } 之后的额外);),我已经修复了。
    【解决方案2】:

    事件已经包含了目标对象,所以我们可以这样检查:

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

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

    【讨论】:

    • 像魅力一样工作
    • 别忘了 textarea!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    相关资源
    最近更新 更多