【问题标题】:initKeyEvent keypress only works in FireFox. need a cross browser solution!initKeyEvent 按键仅适用于 FireFox。需要一个跨浏览器解决方案!
【发布时间】:2011-09-18 09:43: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 等中不起作用。

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

【问题讨论】:

  • Reproduced in Opera 11 with JS Fiddle,但 Chromium 12 报告:Uncaught Error: NOT_SUPPORTED_ERR: DOM Exception 9,Firefox 4:Error: uncaught exception: [Exception... "Operation is not supported" code: "9" nsresult: "0x80530009 (NS_ERROR_DOM_NOT_SUPPORTED_ERR)" location: "http://fiddle.jshell.net/_display/ Line: 19"]。我怀疑这不是特定于 Opera 的问题,除非重现的演示大错特错。
  • 您需要显示代码的更多上下文。你能否请一个最小可行的例子来说明问题是什么?三行代码不足以充分诊断问题。
  • @David 我将代码范围从stackoverflow.com/questions/668720/…
  • 感谢 Jack,但这仍然不足以提供帮助。那只是一个功能。我们需要查看您在哪里执行它(您如何调用它以及您的 HTML 是什么)。请链接到您以触发错误的方式调用该函数的小示例。
  • @nathan 谢谢,我已经重新编辑了

标签: javascript html web


【解决方案1】:

补充亚历山大的回应:

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

this SO answer 中发布了一个可行的解决方案。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      • 2012-12-22
      • 2016-03-31
      • 2014-05-03
      • 1970-01-01
      • 2015-07-04
      • 2011-03-05
      相关资源
      最近更新 更多