initKeyEvent按键仅适用于FireFox。需要跨浏览器解决方案!

时间:2011-06-20 04:20:03

标签: javascript html web

这是我的代码:

<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等中不起作用。

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

2 个答案:

答案 0 :(得分:6)

对于基于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);

答案 1 :(得分:4)

添加到亚历山大的回复:

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

此工作解决方案发布在this SO answer