Chrome中的Keydown Simulation通常会触发,但不是正确的键

Chrome中的Keydown Simulation通常会触发,但不是正确的键

ispatchEvent(keyEvent);

在这段代码中,我正在键入字母,m但textarea只获取keyCode 13,这是Enter键。所以,我尝试了一个我在网上看到的覆盖代码,它将值设置为keyCodeVal,但没有成功


var keyEvent = document.createEvent('KeyboardEvent');

Object.defineProperty(keyEvent, 'keyCode', { 

                         get : function() {

                                 return this.keyCodeVal;

                         }

                        });

keyEvent.initKeyboardEvent('keydown', true, false, null, 0, false, 0, false, 77, 0);

keyEvent.keyCodeVal = 77;

inputNode.dispatchEvent(keyEvent);

有谁知道如何设置keyCode值?


慕容3067478
浏览 630回答 3
3回答

侃侃无极

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)例2例3重要说明1:charCode,keyCode以及不推荐使用的属性。所以我的crossBrowser_initKeyboardEvent没有任何KeyboardEvent构造函数在某些浏览器中绝对保证该属性的正确值。您可以使用属性“key”和“char”来编辑我的要点,以强制在具有只读charCode,keyCode和哪些属性的浏览器中使用initEvent。重要说明2:不推荐使用keypress事件,现在我的Keyboard事件级别3 polyfill不支持。这意味着keypress事件中的key和char属性可以具有随机值。我正在努力解决这个问题以向后兼容。

慕码人8056858

为了让@ 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, "");
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript