为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕容3067478 2019-07-30 15:49:25
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值?
查看完整描述

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)

例2

例3

重要说明1:charCode,keyCode以及不推荐使用的属性。所以我的crossBrowser_initKeyboardEvent没有任何KeyboardEvent构造函数在某些浏览器中绝对保证该属性的正确值。您可以使用属性“key”和“char”来编辑我的要点,以强制在具有只读charCode,keyCode和哪些属性的浏览器中使用initEvent。

重要说明2:不推荐使用keypress事件,现在我的Keyboard事件级别3 polyfill不支持。这意味着keypress事件中的key和char属性可以具有随机值。我正在努力解决这个问题以向后兼容。


查看完整回答
反对 回复 2019-07-30
?
慕码人8056858

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, "");


查看完整回答
反对 回复 2019-07-30
  • 3 回答
  • 0 关注
  • 629 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信