【问题标题】:Get key value of a key pressed获取按下的键的键值
【发布时间】:2012-09-23 06:56:22
【问题描述】:

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

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

但是当我按下 1 而不是返回“1”时它返回“49”。

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

最终目标是让人们只在输入中写入数字。所以我想检测非数字而不显示它们。

【问题讨论】:

  • 49 是键 '1' 的 Ascii code
  • @Andreas 这只是巧合。

标签: javascript jquery keypress


【解决方案1】:

今天的 Chrome 和 Opera 在事件对象中具有只读属性 data

MDN 上写到,目前这个功能是“Working Draft”。

https://developer.mozilla.org/en-US/docs/Web/API/InputEvent/data

【讨论】:

    【解决方案2】:

    对于现在谷歌的人,就像我一样

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

    【讨论】:

    • 如此简单 - 迄今为止最好的一个。
    • e.key 在我的安卓平板电脑上总是给出“未识别”。
    • 通过按SHIFT键,它也将它作为值。
    【解决方案3】:

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

    http://www.selfcontained.us/2009/09/16/getting-keycode-values-in-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”。
    【解决方案4】:

    您可以像这样检测所有键值:

    Here is working jsFiddle example.

    $('textarea').keydown(function(e) {
        var order = e.which;
        console.log(order);
    });​
    

    Source.

    【讨论】:

      【解决方案5】:

      获取ASCII的字符:

      String.fromCharCode();
      

      ASCII 变成一个字符串。

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

          正如评论中所说,它是ASCII 代码。要将其作为角色,您可以这样做:

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

          【讨论】:

          • 请注意,键码与字符码不同。对于简单的键,它们的代码对应于它们的字符对应物,但是对于例如字母键它会产生大写字母。你需要the keypress event 来获取字符代码。
          • 所以对于一个 azerty 键盘我需要按 shift+1 来显示一个。当我先按 shift 时,此解决方案效果不佳。
          • @bl0b: keypress 可能有用,请参阅我上面评论中的链接。
          • 请记住,如果您使用键盘的右侧(数字),这会给您错误的值。
          • 这总是大写字母,即使你没有按 shift
          【解决方案8】:

          在 javascript 中,每个键都与一个 ASCII 码相关联 如下

                                    1-49
                                    2-50
          

          像这样 http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

          所以你需要根据按键事件来映射这个值。

          【讨论】:

          • 但是每个键盘都有不同的映射。
          猜你喜欢
          • 2021-08-11
          • 1970-01-01
          • 1970-01-01
          • 2017-06-23
          • 2014-05-08
          • 1970-01-01
          • 1970-01-01
          • 2021-06-12
          • 2016-03-13
          相关资源
          最近更新 更多