自动将字符串输入到输入

Automate string input to a input

我知道这个问题已经被问过一百遍了。 但再一次,解决方案不再有效。

我需要模拟按键来自动化表单。

如果我这样做

document.getElementById("input_id").value = "testinput"

来自输入的事件不会触发。 而我的值刚刚又被删除了。

是否可以再次模拟击键以便触发所有事件?

您可以像这样在 EventTarget(元素、Window、文档、其他)上调度键盘事件:

element.dispatchEvent(new KeyboardEvent('keydown', {'key': 'a'}));

示例:

let element = document.querySelector('input');
element.onkeydown = e => alert(e.key);
changeValButton.onclick = () => element.value += "a";
dispatchButton.onclick = () => {
  element.dispatchEvent(new KeyboardEvent('keydown',{'key':'E'}));
  element.dispatchEvent(new KeyboardEvent('keyup',{'key':'E'}));
}
<input type="text" value="">
<button id="dispatchButton">Press to dispatch event </button>
<button id="changeValButton">Press to change value </button>

我现在找到了适合我的以下代码:

function set_value(doc, input_value) {
  doc.value === undefined ? doc.innerHTML = input_value : doc.value = input_value;
  events = ["keydown", "keypress", "input", "keyup", "change"]
  for (var i = 0; i < events.length; ++i) doc.dispatchEvent(new Event(events[i], {
    bubbles: true
  }));
}