【问题标题】:Get Key Value of Key Pressed with javascriiipt获取用javascript按下的键的键值
【发布时间】:2021-08-11 19:05:02
【问题描述】:

我没有找到打印 keypressed 数值的方法。

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

我必须运行一个条件来仅从 keyPressed 打印数值。但发现 keyCode 已被弃用。我只发现e.codee.key 但它们不能按照我的要求打印字母的数值。 我想检查按下的键是否是字母或打印按下的字母的ASCII值

【问题讨论】:

  • 如果您正在尝试输入,请尝试使用

标签: javascript key keypress event-listener keycode


【解决方案1】:

使用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.

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


更新以回答更一般的问题“如何确定键盘事件代码是用于 unicode 字符还是其他字符?”

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

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

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

将这些组合在一起意味着如果event.key字符串的长度大于1,但字符串中的第一个字符是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.

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

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

要找出键的命名键属性值是什么,您可以运行脚本以实验性方式找出,也可以在 W3C 候选推荐 as linked above 中查找它们。

【讨论】:

  • 谢谢。我想要的,已经绰绰有余了,而且我还要学习一些新东西。
  • 不客气。我刚刚更新了答案以包括处理键盘事件以区分键的 unicode 值或非 unicode 键的命名属性值。希望您能从中受益。
猜你喜欢
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 2014-05-08
  • 1970-01-01
  • 2019-06-12
相关资源
最近更新 更多