首页 > 解决方案 > 如何模拟适用于 JavaScript 中的字母数字和不可打印字符的跨浏览器按键?

问题描述

这是一个更具体的问题,是否可以以编程方式模拟按键事件?每个答案都以某种方式缺少以下信息,从而降低了问题的价值。我已经在那里尝试了三件在现代浏览器中不起作用的东西,或者官方消息人士建议不要这样做。

这是我正在寻找的内容:

  1. 在回答时,每个示例都应该适用于现代版本的 FirefoxChrome。
  2. 没有示例包括已弃用的对象、字段、属性或函数。
  3. 每个答案都应包括在文本字段和文本区域中键入可打印字符的方法。 正如下面的评论中提到的,这是无法做到的。
  4. 每个答案都应该包括一种在输入没有焦点时键入字母数字字符的方法。例如,“a”、“b”、“c”等。
  5. 每个答案都应该包括一种输入不可打印字符的方法。例如,向下翻页、向左箭头、F1 键(如果不可能,可以这样声明)、Enter 等。
  6. 每个答案都应该包含一个链接,指向模拟字母数字字符和不可打印字符所需的所有“代码”,或者更好的是,将该信息嵌入到答案中。我在这里松散地使用术语“代码”:我的意思是任何适合满足第二点的术语。

标签: javascriptdom-events

解决方案


该解决方案满足所有标准:

  1. 此示例适用于现代版本的 chrome 和 firefox ( https://caniuse.com/dispatchevent ) ( https://caniuse.com/keyboardevent-key )
  2. 此示例不包含任何已弃用的内容
  3. 不适用
  4. 支持字母数字字符
  5. 使用此解决方案可以做到这一点
  6. 您可以设置key等于这些值之一https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values(我会嵌入这个,但是,有很多代码)
  • Ctrl:使用ctrlKey选项(布尔值)
  • Alt:使用altKey选项(布尔值)
  • Shift:使用shiftKey选项(布尔值)
  • 元键/命令键:使用metaKey选项(布尔值)

function simulateKeypress(target, options) {
  target.dispatchEvent(new KeyboardEvent('keydown', options));
}

document.addEventListener("keydown", event => {
  console.log(event.key);
});

 
setTimeout(() => {

  simulateKeypress(document, {
    key: "F1"
  });
}, 1000);


推荐阅读