javascript - 以编程方式发送键盘事件不会将它们分派(dispatch)到输入中

标签 javascript input keyboard-events

我正在向文档发送以编程方式生成的键盘事件。我希望当前聚焦的输入元素会显示它们,但事实并非如此。事件是从具有此函数的字符串生成的:

const simulateKeyPress = keys => {
  keys.split('').forEach(theKey => {
    const e = new window.KeyboardEvent('keypress', {
      bubbles: true,
      key: theKey,
      keyCode: theKey.charCodeAt(0),
      charCode: theKey.charCodeAt(0),
    })
    document.dispatchEvent(e)
  })
}

如果我将 EventListener 添加到文档中,它将接收所有事件。他们的 isTrusted 标志设置为 false,但这可能是问题所在吗?

最佳答案

无法通过网站以编程方式完成。就像你说的 isTrusted boolean as false 不会正确触发按键(自 Chrome 53 起):https://developer.mozilla.org/en/docs/Web/API/Event/isTrusted

我试图在这里解决这个问题:https://codepen.io/zvona/pen/LjNEyr?editors=1010

实际上唯一的区别是为 activeElement 分派(dispatch)事件,例如:document.activeElement.dispatchEvent(e);。此外,如果您能够 Hook 输入的事件,则可以添加事件监听器来完成这项工作:

input.addEventListener('keypress', (evt) => {
  evt.target.value += evt.key;
});

但如前所述,这不是可信事件。然而,这可以通过浏览器扩展来完成(参见:How to to initialize keyboard event with given char/keycode in a Chrome extension?)

关于javascript - 以编程方式发送键盘事件不会将它们分派(dispatch)到输入中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45412590/

相关文章:

python - 相当于 Ipython notebook 中的 raw_input

c# - 使用 WPF KeyDown 事件了解多个键

javascript - 从 CSV 文件中提取 x/y/z 值

javascript - JsonWebToken 用户身份验证问题

javascript - 向网站添加了一些代码,它工作正常但似乎无​​限滚动到页脚之外

html - HTML5 中有浮点输入类型吗?

php - 将字段数据处理到mysql数据库的好方法

macos - 检测 Mac OS X 上是否按下 Return/Enter 键

java - 3 键键盘快捷键

javascript - JsPlumb' : if source `div ` is child of `div` with `position:absolute` -> targed endpint wrong drawn