Javascript 使用dispatchEvent以编程方式将键发送到输入

Javascript 使用dispatchEvent以编程方式将键发送到输入,javascript,dom-events,keyboard-events,custom-events,Javascript,Dom Events,Keyboard Events,Custom Events,我正在尝试根据用户操作向输入元素发送字符 我试图将KeyboardEvent与dispatchEvent一起使用,但无论我做什么,它都不起作用 例如: let keyEvent = new KeyboardEvent(); keyEvent.key = 'a'; keyEvent.keyCode = 'a'.charCodeAt(0); keyEvent.which = event['keyCode']; keyEvent.altKey = false; keyEvent.ctrlKey = t

我正在尝试根据用户操作向输入元素发送字符

我试图将
KeyboardEvent
dispatchEvent
一起使用,但无论我做什么,它都不起作用

例如:

let keyEvent = new KeyboardEvent();
keyEvent.key = 'a';
keyEvent.keyCode = 'a'.charCodeAt(0);
keyEvent.which = event['keyCode'];
keyEvent.altKey = false;
keyEvent.ctrlKey = true;
keyEvent.shiftKey = false;
keyEvent.metaKey = false;
keyEvent.bubbles = true;
不确定这是否正确,但我已将其发送如下:

  document.querySelector('input').dispatchEvent(keyEvent);
  document.activeElement.dispatchEvent(keyEvent);
  document.dispatchEvent(keyEvent);


如果我在单击按钮之前先聚焦输入,那么实际上什么都不会发生。有什么建议这里可能出错吗?

在您的代码基础中,这里有一个,但是: -发送keyevent后,下一个是什么?谁是侦听器? - ... 我一点也看不懂

document.querySelector('button').addEventListener('mousedown', (e) => {
        e.preventDefault();
      e.stopImmediatePropagation();
        e.stopPropagation();

      console.log('send key');

    /*let keyEvent = new KeyboardEvent();

    keyEvent.key = 'a';
    keyEvent.keyCode = 'a'.charCodeAt(0);
    keyEvent.which = event['keyCode'];
    keyEvent.altKey = false;
    keyEvent.ctrlKey = true;
    keyEvent.shiftKey = false;
    keyEvent.metaKey = false;
    keyEvent.bubbles = true;
    console.log(keyEvent);       */
    var keyEvent = new KeyboardEvent("keydown", {
      bubbles : true,
      cancelable : true,
      char : "A",
      key : "1",
      shiftKey : true,
      keyCode : 81
  });
      document.querySelector('input').dispatchEvent(keyEvent);
      document.activeElement.dispatchEvent(keyEvent);
      document.dispatchEvent(keyEvent);
    console.log(keyEvent);
});

实际上,由于安全原因,将
键盘事件
分派到
输入
元素不会生成您期望的操作

这份文件非常清楚地表明:

注意:手动触发事件不会生成默认操作 与该事件有关。例如,手动触发关键事件 不会导致该字母出现在聚焦文本输入中。在 对于UI事件,出于安全原因,这一点很重要,因为 防止脚本模拟与交互的用户操作 浏览器本身

所以
dispatchEvent
的东西根本不起作用


另一方面,考虑直接操纵<代码>输入< /代码>元素。

你是对的。我的错误。我想简单地将键/字符发送到输入字段。还有一些键,比如arrow right backspace,这样输入就可以订阅了?我希望我可以发送一些键,比如backspace到输入元素。但正如@Microloft所建议的,由于安全原因,这无法完成,所以我必须自己操作,使用插入符号位置。。。