【问题标题】:How do you convert a Javascript keyCode to a charCode?如何将 Javascript keyCode 转换为 charCode?
【发布时间】:2020-11-19 02:20:48
【问题描述】:

在 Javascript 键盘事件中,为按下的键提供一个代码,但是,它不是 ASCII 或 UTF-8 字符代码,而是键盘键的代码。有时 keyCode 恰好与 ASCII/UTF-8 代码匹配,有时则不匹配。

有没有办法,给定一个 Javascript 密钥代码(通过 e.keyCodee.which 访问)来获取相应的 ASCII 或 UTF-8 字符代码?

Here's a working JSFiddle 来说明我的意思,或者运行下面的 sn-p。

document.addEventListener("keyup", function(e) {

  document.querySelector(".key").innerHTML = e.key;
  document.querySelector(".keyCode").innerHTML = e.keyCode;
  document.querySelector(".UTF").innerHTML = String.fromCharCode(event.keyCode);

});
code {
  background-color: #e2aec8ab;
  border: solid 1px gray;
  border-radius: 3px;
  padding: 0 .5em;
  min-height: 1em;
  min-width: .2em;
  margin: 0 .1em;
}

.output {
  margin: 2em;
  border: solid 1px lightgray;
  border-radius: 3px;
  background-color: rgba(200, 250, 230, .3);
  padding: 1em;
}
Type here. Try some alpha letters as well as special keys like <code>`</code>
<code>-</code>
<code>=</code>
<code>[</code>
<code>]</code>
<code>[ENTER]</code>
<code>;</code>
<code>'</code>


<div class="output">
  You typed <code class="key"></code> which is Javascript <b></b>keyCode</b> <code class="keyCode"></code>, in UTF that would be <code class="UTF"></code>
</div>

两个例子:

  1. 在键盘上输入2
  2. 捕获事件。 event.keyCode 是 50。
  3. UTF 字符 50 是 2 (DIGIT TWO)

但是:

  1. 在键盘上输入[
  2. 捕获事件。 event.keyCode 是 219。
  3. UTF 字符 219 是 Û (LATIN CAPITAL LETTER U WITH CIRCUMFLEX)
  4. 我希望事件包含的字符代码是91,它对应于LEFT SQUARE BRACKET

如何将 Javascript 密钥代码(例如 219)转换为 UTF-8 字符代码(例如 91)?

【问题讨论】:

    标签: javascript events dom-events keycode fromcharcode


    【解决方案1】:

    我只想说,这个问题变成了一次有趣的学习冒险。但是……

    您正在使用已弃用的 API。

    事实证明KeyboardEvent.keyCode 已经被弃用了一段时间。因为它使用 ASCII 的十进制版本。要使用的正确代码实际上是event.Code。但这不是你所追求的。

    要获取 ascii 编号,您可以使用 event.key.charCodeAt() 这确实有一些缺陷,因为它会在您按下 shift 时报告 S。但是您可以使用event.location 来确定该键是否为特殊控制键。 0 是标准键,1-3 是特殊位置(我认为)。

    document.addEventListener("keyup", function(e) {
    
      document.querySelector(".key").innerHTML = e.key;
      document.querySelector(".keyCode").innerHTML = e.code;
      document.querySelector(".ascii").innerHTML = e.key.charCodeAt()
      document.querySelector(".UTF").innerHTML = String.fromCharCode(event.key.charCodeAt());
    
    });
    code {
      background-color: #e2aec8ab;
      ;
      border: solid 1px gray;
      border-radius: 3px;
      padding: 0 .5em;
      min-height: 1em;
      min-width: .2em;
      margin: 0 .1em;
    }
    
    .output {
      margin: 2em;
      border: solid 1px lightgray;
      border-radius: 3px;
      background-color: rgba(200, 250, 230, .3);
      padding: 1em;
    }
    Type here. Try some alpha letters as well as special keys like <code>`</code>
    <code>-</code>
    <code>=</code>
    <code>[</code>
    <code>]</code>
    <code>[ENTER]</code>
    <code>;</code>
    <code>'</code>
    
    
    <div class="output">
      You typed <code class="key"></code> which is Javascript <b>keyCode</b> <code class="keyCode"></code>, in ASCII that would be <code class="ascii"> </code> which is <code class="UTF"></code>
    </div>

    【讨论】:

    • 啊,我不知道为什么我没想到只是读取event.key 的UTF 代码,因为我已经有了它!很聪明!我回去查看 e.charCode 的 MDN 文档(不幸的是,它也已弃用,但会给出 UTF-8 代码!)它实际上在该文档的顶部说:“不要使用这个属性,因为它已被弃用。请改用 key 属性。因此,如果我只是仔细阅读,我可能会接受这个提示!
    猜你喜欢
    • 1970-01-01
    • 2011-01-12
    • 2015-09-12
    • 2021-11-23
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多