Javascript 在表单中键入字母时,如何阻止键盘功能启动?

Javascript 在表单中键入字母时,如何阻止键盘功能启动?,javascript,jquery,Javascript,Jquery,我有一个脚本,当按下键盘上的“N”和“p”键时,它会触发滚动到下一个/上一个。我的问题是,当用户通常以任何形式(如搜索字段、登录字段等)键入这些字母时,如何阻止触发此操作,因为当我按n时,例如,John在表单中,它不会写入n,而是触发滚动功能。如何纠正这种行为 我的代码如下: $(document).keydown(function (evt) { if (evt.keyCode == 78) { evt.preventDefault(); scrollT

我有一个脚本,当按下键盘上的“N”和“p”键时,它会触发滚动到下一个/上一个。我的问题是,当用户通常以任何形式(如搜索字段、登录字段等)键入这些字母时,如何阻止触发此操作,因为当我按n时,例如,John在表单中,它不会写入n,而是触发滚动功能。如何纠正这种行为

我的代码如下:

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

谢谢。

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

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


在这里,我问最近的表单字段是从元素开始的(因为
最近的
是从您给它的元素开始的),并通过祖先进行处理。如果没有,则返回的jQuery对象将为空,
[0]
将返回
未定义的
。所以自从<代码>!未定义的
真的
,当不在表单字段中时,我们将处理您的逻辑。

我认为类似于

$('form').on('keydown', function(event) {event.stopPropagation();});

如果不需要表单内部的键盘控件,则应执行此操作。

使用的
target
属性,该属性指向源DOM节点。因此,您可以轻松地使用

var nn = evt.target.nodeName.toLowerCase();
if (nn != "input" && nn != "textarea")
    // do your special handling
但可能更容易检查是否存在,它指向元素所有者表单:

if (! "form" in evt.target)
    // do your special handling

@艾哈迈德福阿德:不用担心,很高兴这有帮助。
if (! "form" in evt.target)
    // do your special handling