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所建议的,由于安全原因,这无法完成,所以我必须自己操作,使用插入符号位置。。。