【问题标题】:Print the name of a Key when it is Pressed?按下时打印键的名称?
【发布时间】:2016-10-10 01:46:03
【问题描述】:

是否可以在按下时获取键的名称:

field.addEventListener("keydown", keyDown, false);
function keyDown(event) {
    ...
}

例如,当按下空格键时,我想得到字符串值:“空格”,或者类似的东西。有没有一种简单的方法可以做到这一点,或者我需要一个库。

【问题讨论】:

标签: javascript keypress dom-events


【解决方案1】:

您可以获得键码,但不能获得名称,因为名称因文化、语言等而异,并且 JavaScript 不提供任何获取文化和语言特定名称的方法适合当前的文化和语言。

所以“是否有可能在按下键时获得键的名称?”的答案?是:不是来自 JavaScript 或浏览器内置的任何东西。您将需要查找表和/或库。请注意,不同的键盘布局可能会给出不同的映射。

keypress 事件为您提供匹配字符的字符代码(如果有)(在 event.charCode 上,您可以像 String.fromCharCode(event.charCode) 一样使用它),但不是 keydown,因为并非所有keydowns 都会生成字符(与其他按键不同),实际上有时需要多个keydown 才能创建字符。


要获取密钥代码,只需使用:

var keyCode = event.which || event.keyCode || 0;

如果它存在且真实,则将使用event.which,或者如果它存在且真实,则使用event.keyCode,或者如果两者都不存在且真实,则使用0。大多数浏览器使用which;许多版本的 IE 使用keyCode

由于键“名称”可能包含修饰符,我会提到事件中也有可用的修饰符标志:event.shiftKeyevent.ctrlKeyevent.altKeyevent.metaKey

您会看到有人告诉您在执行上述操作后可以使用String.fromCharCode(keyCode) 来获取密钥代码的字符。这只适用于非常小的一组键码,因为键码不是字符码。两者之间有少量重叠,这就是为什么人们认为你可以做到这一点。例如,如果你在键盘上按 a,在我听说过的任何键盘上String.fromCharCode(keyCode) 都会给你"A"(然后你可以使用event.shiftKey 来决定是否它小写)。但是当您遇到超出英文字母表的 26 个字母(可能还有标准的十位数字)之外的任何内容时,它很快就会下降。

【讨论】:

  • 我想我们可以从String.fromCharCode() 获取键盘值。问题是它将为 aA 返回相同的值
  • @Rajesh:键码不是字符码。所以这对一些人有用,但不是对所有人。
  • 我不是在寻找密钥代码。所以我猜我将不得不为此使用一个库
  • @user3024235:可悲的是,据我所知,是的。
【解决方案2】:

您可以使用event.keyevent.code,例如:

document.body.addEventListener('keyup', function(event) {
  console.log(event.key);
  console.log(event.code);
});

因此,如果我们假设用户按下键“k”,预期的输出将是:kKeyK。按“Alt”,预期的输出将是:AltAltLeft

但是,keypress 的情况会有所不同,因为它不会检测到任何特殊键,例如 ALT、CTRL、SHIFT、META 等...但它仍然会检测到英文字母和数字。


来源:

event.key - W3schools
event.code - W3schools

【讨论】:

    【解决方案3】:

    您可以使用this file 并查找角色的名称。这是你想要的吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 2020-06-20
      • 2021-06-02
      • 2014-03-14
      • 2017-09-05
      • 2017-01-17
      • 1970-01-01
      相关资源
      最近更新 更多