4

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

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

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

4

2 回答 2

8

In the event:

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

What that does is see if the target originates in or passes through an input element and return without doing anything if so. More: closest | event.target Your logic for other cases would follow, e.g.:

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

N.B. - If you also want to filter out select elements, then: $(e.target).closest("input, select") (and so on, for instance for button elements).

于 2013-07-26T22:18:18.973 回答
2

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

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

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

于 2017-02-20T09:11:38.333 回答