2010-05-26 75 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