按键事件获取按下的键的键值

9

我不知道如何获取按键的值。 目前我有:

$('#info_price').bind('keydown',function(evt){
    alert(evt.keyCode);

但是当我按下数字1时,它返回的是'49'而不是'1'。

编辑:我知道键'1'的Ascii代码。

最终目标是允许人们只在输入框中写数字。因此,我想检测非数字并将其隐藏。


5
49是键盘上数字键'1'的Ascii码 - Andreas
1
@Andreas 这只是巧合。 - Neil
8个回答

24

对于现在像我一样正在搜索的人,请注意:

$('input').on('keydown', function(e) {
  console.log(e.key);
});​

3
如此简单 - 最好的一个。 - BradM
2
我的安卓平板电脑上,e.key始终显示为“未知”。 - Curtis
1
通过按下SHIFT键,它也将其作为值获取。 - ssi-anik

22

正如评论中所述,它是 ASCII 码。要将其作为字符获取,可以执行以下操作:

alert(String.fromCharCode(evt.keyCode));

4
请注意,按键码与字符码不是同一概念。 对于简单的按键,它们的按键码与字符码相对应,但对于字母键等,则会得到大写字母。 若要获取字符码,您需要使用“keypress”事件。请参见此 示例 - pimvdb
所以对于 AZERTY 键盘,我需要按 shift+1 来显示数字 1。由于我先按了 shift 键,这个解决方案也不起作用。 - bl0b
请记住,如果您使用键盘的右侧(数字键)进行输入,则会得到不正确的值。 - Milad
这总是会输出大写字母,即使你没有按下shift键。 - Curtis
1
注意:keyCode已被弃用,请使用code代替。请参阅MDN - hitautodestruct
显示剩余3条评论

6

这里有一份完整的代码供您使用(不是我的,但我用过):

http://www.selfcontained.us/2009/09/16/getting-keycode-values-in-javascript/

该代码可以帮助您获取JavaScript中按键码的值。
keycode = {

    getKeyCode : function(e) {
        var keycode = null;
        if(window.event) {
            keycode = window.event.keyCode;
        }else if(e) {
            keycode = e.which;
        }
        return keycode;
    },

    getKeyCodeValue : function(keyCode, shiftKey) {
        shiftKey = shiftKey || false;
        var value = null;
        if(shiftKey === true) {
            value = this.modifiedByShift[keyCode];
        }else {
            value = this.keyCodeMap[keyCode];
        }
        return value;
    },

    getValueByEvent : function(e) {
        return this.getKeyCodeValue(this.getKeyCode(e), e.shiftKey);
    },

    keyCodeMap : {
        8:"backspace", 9:"tab", 13:"return", 16:"shift", 17:"ctrl", 18:"alt", 19:"pausebreak", 20:"capslock", 27:"escape", 32:" ", 33:"pageup",
        34:"pagedown", 35:"end", 36:"home", 37:"left", 38:"up", 39:"right", 40:"down", 43:"+", 44:"printscreen", 45:"insert", 46:"delete",
        48:"0", 49:"1", 50:"2", 51:"3", 52:"4", 53:"5", 54:"6", 55:"7", 56:"8", 57:"9", 59:";",
        61:"=", 65:"a", 66:"b", 67:"c", 68:"d", 69:"e", 70:"f", 71:"g", 72:"h", 73:"i", 74:"j", 75:"k", 76:"l",
        77:"m", 78:"n", 79:"o", 80:"p", 81:"q", 82:"r", 83:"s", 84:"t", 85:"u", 86:"v", 87:"w", 88:"x", 89:"y", 90:"z",
        96:"0", 97:"1", 98:"2", 99:"3", 100:"4", 101:"5", 102:"6", 103:"7", 104:"8", 105:"9",
        106: "*", 107:"+", 109:"-", 110:".", 111: "/",
        112:"f1", 113:"f2", 114:"f3", 115:"f4", 116:"f5", 117:"f6", 118:"f7", 119:"f8", 120:"f9", 121:"f10", 122:"f11", 123:"f12",
        144:"numlock", 145:"scrolllock", 186:";", 187:"=", 188:",", 189:"-", 190:".", 191:"/", 192:"`", 219:"[", 220:"\\", 221:"]", 222:"'"
    },

    modifiedByShift : {
        192:"~", 48:")", 49:"!", 50:"@", 51:"#", 52:"$", 53:"%", 54:"^", 55:"&", 56:"*", 57:"(", 109:"_", 61:"+",
        219:"{", 221:"}", 220:"|", 59:":", 222:"\"", 188:"<", 189:">", 191:"?",
        96:"insert", 97:"end", 98:"down", 99:"pagedown", 100:"left", 102:"right", 103:"home", 104:"up", 105:"pageup"
    }

};

对我来说不起作用。当我按下'a'并且大写锁定打开时,它无法给出'A'。 - YetAnotherBot

3

但是每个键盘都有不同的映射。 - bl0b

1

1
关键代码并不直接映射到字符值。相反,您需要查看keypress事件,该事件为您提供了一个charCode属性。然后,您可以使用String.fromCharCode将其转换为字符串。

0

获取 ASCII 字符:

String.fromCharCode();

ASCII 转换为字符串。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接