3 回答
TA贡献2051条经验 获得超10个赞
Orwellophile的解决方案确实有效。
首先:'keyCode','charCode'和'which'只在Safari和IE9 +中读取(至少)。
第二:initKeyboardEvent有点乱。所有浏览器都以不同的方式实现它。即使在webkit中,也有几种不同的initKeyboardEvent实现。并且在Opera中没有“好”的方式来实现initKeyboardEvent。
第三:不推荐使用initKeyboardEvent。您需要使用initKeyEvent或KeyboardEvent构造函数。
在这里我写了一个跨浏览器的initKeyboardEvent函数(gist):
例:
var a = window.crossBrowser_initKeyboardEvent("keypress", {"key": 1, "char": "!", shiftKey: true})alert(a.type + " | " + a.key + " | " + a.char + " | " + a.shiftKey)
这是我的DOM键盘事件级别3 polyfill与跨浏览器KeyboardEvent构造函数。
例:
var a = new KeyboardEvent("keypress", {"key": 1, "char": "!", shiftKey: true})alert(a.type + " | " + a.key + " | " + a.char + " | " + a.shiftKey)
重要说明1:charCode,keyCode以及不推荐使用的属性。所以我的crossBrowser_initKeyboardEvent没有任何KeyboardEvent构造函数在某些浏览器中绝对保证该属性的正确值。您可以使用属性“key”和“char”来编辑我的要点,以强制在具有只读charCode,keyCode和哪些属性的浏览器中使用initEvent。
重要说明2:不推荐使用keypress事件,现在我的Keyboard事件级别3 polyfill不支持。这意味着keypress事件中的key和char属性可以具有随机值。我正在努力解决这个问题以向后兼容。
TA贡献1803条经验 获得超6个赞
为了让@ Orwellophile的脚本在Google Chrome 26.0.1410.65上运行(在Mac OS X 10.7.5上,如果这很重要),我不得不更改一行:他的脚本似乎有initKeyboardEvent
不同于MDN的顺序initKeyboardEvent的文档。
更改的行看起来像这样:
oEvent.initKeyboardEvent("keydown", true, true, document.defaultView, k, k, "", "", false, "");
添加回答
举报