跨浏览器协调keyCode / charCode的首选方法是什么?

时间:2010-05-26 22:09:07

标签: javascript keycode

基于keydown事件的属性,我想确定当前的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
};

在某些情况下,各个浏览器的keyCodes也不同?

实施例

keydown事件在浏览器中具有不同的keyCode值。 冒号键(:/;)   - firefox上的keyCode是59   - IE / safari上的keyCode为186

了解更多信息

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

2 个答案:

答案 0 :(得分:1)

如果您对与按键相关联的字符代码感兴趣,那么您将无法使用keydown事件。 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密钥处理的权威参考。

答案 1 :(得分:-1)

虽然我一般都不喜欢我即将给出的答案,但我觉得这是合适的:

这是jQuery,Prototype,Dojo或MooTools等库的完美用例。

你不想为这项工作增加负担,已经完成了。