initKeyEvent按键仅适用于FireFox.需要一个跨浏览器的解决方案

initKeyEvent keypress only works in FireFox. need a cross browser solution!

本文关键字:一个 浏览器 解决方案 适用于 FireFox initKeyEvent      更新时间:2023-09-26

这是我的代码:

<script>
function f(){
var i=document.getElementById("i");
i.focus();
 var evt = document.createEvent("KeyboardEvent");
    evt.initKeyEvent("keypress", true, true, null, false, false, false, false, 
0, 32);
    i.dispatchEvent(evt);
}
</script>
<body onload="f();">
<input id="i"/>
</body>

在firefox中打开脚本,它就可以工作了。输入框中的空格表示代码已经工作。

然而,上面的代码在Chrome、Safari、Opera等中不起作用。

我们如何修改上面的代码使其在这些浏览器中工作?

对于基于Webkit的浏览器(Safari/Chrome),事件初始化调用的外观应该有所不同(请参阅https://bugs.webkit.org/show_bug.cgi?id=13368):

initKeyboardEvent(in DOMString typeArg, 
                  in boolean canBubbleArg, 
                  in boolean cancelableArg, 
                  in views::AbstractView viewArg, 
                  in DOMString keyIdentifierArg, 
                  in unsigned long keyLocationArg, 
                  in boolean ctrlKeyArg, 
                  in boolean shiftKeyArg, 
                  in boolean altKeyArg, 
                  in boolean metaKeyArg, 
                  in boolean altGraphKeyArg);

添加到Alexander的响应中:

有一个webkit错误,使用initKeyboardEvent初始化的键盘事件得到了不正确的keyCode和charCode 0:https://bugs.webkit.org/show_bug.cgi?id=16735

这个SO的回答中发布了一个有效的解决方案。