这是我的代码:
<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等中不起作用。
我们如何修改上面的代码以使其在这些浏览器中运行?
答案 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。