使用javascript获取按键的键值

Get Key Value of Key Pressed with javascriiipt

我找不到打印按键的数值的方法。

    window.addEventListener('keydown',e => {
        if(e.keyCode >=65 && e.keyCode <=90){
        console.log('Yeap letter is pressd');
    
    })

我有一个 运行 条件来仅打印来自 keyPressed 的数值。但是发现 keyCode 已被弃用。我只找到了 e.codee.key 但它们没有按照我的要求工作以打印字母的数值。 我想检查按下的键是否是字母或打印按下的字母的ASCII值

使用string.charCodeAt(0)获取使用UTF-16编码的原始字符串值中第一个字符的低16位,这是JavaScript内部用来表示内存中字符串的编码方法.

如果UTF-16编码的值小于128,密钥可以用ASCII表示。但是,要获取 ASCII 控制代码值,请使用 ASCII 字母编码的最低有效 4 位。

window.addEventListener('keydown',e => {
    let ascii, key = e.key;
    if(key.length == 1) {
        ascii = key.charCodeAt(0);
        if(ascii < 128 && e.ctrlKey) {
             ascii = ascii & 0x1f;
        }
    }
    if( typeof ascii == "number" && ascii < 128) {
        console.log(`ASCII code ${ascii} entered from keyboard`);
    }
    else {
        console.log( key + " is not in the ASCII character set");
    }
});
Type an ASCII letter.

运行 代码片段将分别报告 shiftCtrl 键的按键事件。请注意 ASCII 编码已在很大程度上被 Web 上的 utf-8 编码所取代,因为 ASCII 不适合传输非英语内容,甚至不适合从其他语言借用或引用的短语。


更新以回答更普遍的问题“如何确定键盘事件代码是针对 unicode 字符还是其他字符?”

  • event.key 要么设置为生成事件的键的 unicode 值,要么设置为键的“命名键属性值”要么产生一个 ASCII 控制字符,如转义键,要么不产生 unicode 值,如功能、箭头、导航和系统键,如“打印屏幕”等。

  • 现在W3C候选推荐中named key attribute values,所有键名都是一串ASCII字符,字符串中有多个字符

  • Unicode中的前128个代码点用于表示ASCII字符集。

将这些结合在一起意味着如果event.key字符串的长度大于一个,但字符串中的第一个字符是ASCII字符,那么event.key一定是一个键属性值:

window.addEventListener('keydown',e => {
    const key = e.key;
    if(key.length > 1 && key.charCodeAt(0) < 128) {
        console.log("Named attribute value: %s", key)
    }
    else {
        console.log("Unicode character '%s'", key);
    }
});
Click here to focus and press a key on the keyboard.

请注意,space 栏在 Unicode 中生成 space 字符。在处理命名键属性值时,您可以尝试将其中一些转换为 ASCII 控制代码,但通常最好在代码中使用它们的名称:

if( event.key === "Enter"){... handle enter key...}
if( event.key === "Escape") {... handle escape key...}

要找出一个键的命名键属性值是什么,您可以 运行 一个脚本来通过实验找出或在 W3C 候选推荐中查找它们 as linked above.