如何在表单中输入字母时停止触发键盘功能?

Ahm*_*uad 0 javascript jquery

我有这个脚本,当按下键盘上的"N"和"P"键时,它会触发滚动到next/prev.我的问题是当用户以任何形式(例如搜索字段,登录字段等)正常输入这些字母时,如何阻止这种情况发生,因为当我在表格中按n例如John时,它不会写N而是触发滚动功能.如何解决这种行为?

我的代码如下:

$(document).keydown(function (evt) {
    if (evt.keyCode == 78) {
        evt.preventDefault();
        scrollToNew();
    } else if (evt.keyCode == 80) {
        evt.preventDefault();
        scrollToLast();
    }
});
Run Code Online (Sandbox Code Playgroud)

谢谢.

T.J*_*der 8

事件对象有一个target属性,告诉您事件实际发生的位置(之后它会冒泡到文档级处理程序).因此,您可以测试evt.target表单字段元素,如果匹配,则不要执行您的特殊逻辑.

可能最简单的方法是使用closest,例如:

$(document).keydown(function (evt) {
    if (!$(evt.target).closest('input, select, textarea')[0]) {
        if (evt.keyCode == 78) {
            evt.preventDefault();
            scrollToNew();
        } else if (evt.keyCode == 80) {
            evt.preventDefault();
            scrollToLast();
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

在那里,我问的是最接近的表单字段是从元素开始的(因为closest从你给它的元素开始)并通过祖先进行处理.如果有非,则返回的jQuery对象将为空,[0]并将返回undefined.如此以来!undefined就是true,我们会处理你的逻辑,当没有在表单字段.