自动将字符串输入到输入
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
}));
}
我知道这个问题已经被问过一百遍了。 但再一次,解决方案不再有效。
我需要模拟按键来自动化表单。
如果我这样做
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
}));
}