3 回答

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊
Orwellophile的解決方案確實(shí)有效。
首先:'keyCode','charCode'和'which'只在Safari和IE9 +中讀取(至少)。
第二:initKeyboardEvent有點(diǎn)亂。所有瀏覽器都以不同的方式實(shí)現(xiàn)它。即使在webkit中,也有幾種不同的initKeyboardEvent實(shí)現(xiàn)。并且在Opera中沒(méi)有“好”的方式來(lái)實(shí)現(xiàn)initKeyboardEvent。
第三:不推薦使用initKeyboardEvent。您需要使用initKeyEvent或KeyboardEvent構(gòu)造函數(shù)。
在這里我寫(xiě)了一個(gè)跨瀏覽器的initKeyboardEvent函數(shù)(gist):
例:
var a = window.crossBrowser_initKeyboardEvent("keypress", {"key": 1, "char": "!", shiftKey: true})alert(a.type + " | " + a.key + " | " + a.char + " | " + a.shiftKey)
這是我的DOM鍵盤(pán)事件級(jí)別3 polyfill與跨瀏覽器KeyboardEvent構(gòu)造函數(shù)。
例:
var a = new KeyboardEvent("keypress", {"key": 1, "char": "!", shiftKey: true})alert(a.type + " | " + a.key + " | " + a.char + " | " + a.shiftKey)
重要說(shuō)明1:charCode,keyCode以及不推薦使用的屬性。所以我的crossBrowser_initKeyboardEvent沒(méi)有任何KeyboardEvent構(gòu)造函數(shù)在某些瀏覽器中絕對(duì)保證該屬性的正確值。您可以使用屬性“key”和“char”來(lái)編輯我的要點(diǎn),以強(qiáng)制在具有只讀charCode,keyCode和哪些屬性的瀏覽器中使用initEvent。
重要說(shuō)明2:不推薦使用keypress事件,現(xiàn)在我的Keyboard事件級(jí)別3 polyfill不支持。這意味著keypress事件中的key和char屬性可以具有隨機(jī)值。我正在努力解決這個(gè)問(wèn)題以向后兼容。

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
為了讓@ Orwellophile的腳本在Google Chrome 26.0.1410.65上運(yùn)行(在Mac OS X 10.7.5上,如果這很重要),我不得不更改一行:他的腳本似乎有initKeyboardEvent
不同于MDN的順序initKeyboardEvent的文檔。
更改的行看起來(lái)像這樣:
oEvent.initKeyboardEvent("keydown", true, true, document.defaultView, k, k, "", "", false, "");
添加回答
舉報(bào)