按下时打印键的名称?

Print the name of a Key when it is Pressed?

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

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

例如,当按下 space 键时,我想获取字符串值:"space",或者类似的内容。有没有简单的方法可以做到这一点,或者我需要一个图书馆。

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

所以 "Is it possible to get the name of a key when it is pressed?" 的答案是:不是来自 JavaScript 或浏览器内置的任何内容。您将需要查找表 and/or 一个图书馆。请注意,不同的键盘布局可能会给出不同的映射。

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


要获取键码,只需使用:

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

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

由于键 "name" 可能包含修饰符,我会提到事件中也有可用的修饰符标志:event.shiftKeyevent.ctrlKeyevent.altKey, 和 event.metaKey.

你会看到有人告诉你可以在完成上述操作后使用 String.fromCharCode(keyCode) 来获取键码的字符。这仅适用于非常小的键码集,因为键码不是字符码。两者之间有少量重叠,这就是人们认为你可以做到的原因。例如,如果你在键盘上按 a,在我听说过的任何键盘上 String.fromCharCode(keyCode) 都会给你 "A"(然后你可以使用 event.shiftKey决定是否小写)。但是当你进入超过 26 个英文字母(可能还有标准的十位数字)之外的任何东西时,它会迅速下降。

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

您可以使用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