微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Javascript,如何在用户在表单字段中键入内容时检测按键事件,但无法检测到?

如何解决使用Javascript,如何在用户在表单字段中键入内容时检测按键事件,但无法检测到?

在我的网站上,我想当用户点击问号键时动态地打开搜索表单。我可以使用以下代码做到这一点:

document.onkeyup = checkKey;
function checkKey(evt) {
    evt = evt || window.event;
    if (evt.keyCode == '191') { // user inputs the "?" key [shift + /]
        // Do something
    }
}

但是,如果用户只是在评论字段或搜索字段中输入问号,我就不想触发该操作。例如,在Gmail中,您可以点击“?”打开键盘快捷键叠加层,但是如果要编写电子邮件并键入“?”快捷方式无法打开。

用户碰巧在表单字段中键入内容时,如何检测按键事件,但不能检测?

解决方法

嗅探事件target属性的tagName可能就足够了。以下内容显然并不详尽-需要考虑几个极端情况-但这是一个开始。尝试在表单元素中输入内容时,然后在文档其他位置集中时输入内容:

document.onkeyup = checkKey;
function checkKey(evt) {
    const formElements = ['INPUT','TEXTAREA','SELECT','OPTION'];
    evt = evt || window.event;
    if (formElements.includes(evt.target.tagName)) {
      console.log('ignore me!');
    } else {
      console.log('do something!');
    }
}
<h1>my form</h1>
<form>
  <label for="name">name</label>
  <input id="name" name="name" />
  <br/>
  <label for="aboutme">about me</label>
  <textarea id="aboutme" name="aboutme"></textarea>
  <br/>
  <label for="ghostbuster">ghostbuster</label>
  <select id="ghostbuster" name="ghostbuster">
    <option value="winstonzeddmore">Winston Zeddmore</option>
    <option value="egonspangler">Egon Spangler</option>
    <option value="petervenkman">Peter Venkman</option>
    <option value="raystanz">Ray Stanz</option>
  </select>
</form>

<p> some text</p>

,

在checkKey函数中,您可以访问事件对象。您可以检查事件的目标以确定如何处理它。在这种情况下,您可以将示例修改为如下所示:

document.onkeyup = checkKey;
function checkKey(evt) {
    evt = evt || window.event;
    if (evt.target.type === 'input') {
       return;
    }
    if (evt.keyCode == '191') { // user inputs the "?" key [shift + /]
        // Do something
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?