2010-05-26 50 views
2

基於keydown事件的屬性,我想確定當前的charCode是什麼?跨瀏覽器協調keyCode/charCode的首選方式是什麼?

示例。

對於按下NumPad0,D0和Colon鍵時的keydown事件我想知道關聯的charcode是什麼。目前我有一個包含與該keyCode關聯的charcode的映射,或者如果未指定charCode,則使用當前的映射。

keyCode = { 
    Colon: 186, 
    D0: 48, 
    NumPad0: 96, 
}; 
charCodes = { 
    186: 59, 
    96: 48, 
}; 
shiftCharCodes = { 
    186: 58, 
    48: 41 
}; 

此外,在某些情況下,鍵代碼是不同翻過瀏覽器?

示例。

keydown事件在不同的瀏覽器中具有不同的keyCode值。 科隆密鑰(:/;) - 鍵代碼爲59的Firefox - 鍵代碼是IE 186 /狩獵

有關詳細信息

http://www.quirksmode.org/js/keys.html

+0

我不知道它是否與您的項目相關,但如果它是針對遊戲的,並且您使用了WASD鍵,請考慮在我的法國AZERTY鍵盤上使用ZQSD,德國人使用QWERTZ等我必須按主鍵盤上的數字鍵(當qwerty具有1/sth鍵時,首先是&1鍵)。 Webapps應該是安全的,就像向上/向左/向下/向右鍵一樣。 – FelipeAls 2010-05-26 22:25:18

回答

-1

雖然我一般不願意答案像一個我將要提供,我覺得它是適當的:

這是一個像jQuery,Prototype,Dojo或MooTools這樣的庫的完美用例。

你不想讓自己負擔這項工作,它已經完成。

+2

不是真的 - jQuery對於一個人來說並不關心識別鍵。 – 2010-05-26 22:24:07

+0

@Tim - 好吧,讓我具體說一下 - 所以熱鍵插件是*精美的*。 http://code.google.com/p/js-hotkeys/ – 2010-05-26 22:28:39

+1

我幾乎覺得我們需要一種對這種令人討厭但合適的情況的簡寫。 http://stackoverflow.com/questions/423823/whats-your-favorite-programmer-ignorance-pet-peeve/2657095#2657095 – harpo 2010-05-26 22:39:09

1

如果您對與按鍵相關的字符代碼感興趣,您將無法使用​​事件。 keypress事件是唯一可以獲得此信息的地方,對於大多數可打印的密鑰來說,這並不是太麻煩。

document.onkeypress = function(evt) { 
    evt = evt || window.event; 
    var charCode = evt.which || evt.keyCode; 
    alert("Character: " + String.fromCharCode(charCode)); 
}; 

圍繞「特殊」非打印按鍵(如功能鍵)的瀏覽器行爲存在差異。有關更多信息,我認爲this article by Jan Wolter是JavaScript密鑰處理的權威性參考。

+0

我也花了很多時間參考Jan的論文關於js密鑰處理的當前狀態。他得出了同樣的結論:這是一場噩夢。這是一個精心製作的精緻的javascript抽象圖案。 – 2010-05-26 22:37:51

+1

創建一個完整的抽象將完全處理棘手的問題,例如防止默認行爲和處理自動重複的重要事件,這是一項複雜的工作或許不可能完成。我傾向於只爲當前任務編寫儘可能多的抽象。 – 2010-05-26 23:20:01

+0

++爲YAGNI。我們同意了。 – 2010-05-26 23:23:36

相關問題