Javascript - 在按下时打印密钥的名称?

use*_*235 3 javascript keypress dom-events

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

field.addEventListener("keydown", keyDown, false);
function keyDown(event) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

例如,当按空格键时,我想得到字符串值:"space",或沿着这些行的东西.有没有一种简单的方法可以做到这一点,还是我需要一个库.

T.J*_*der 7

您可以获取密钥代码,但不能获取名称,因为名称因文化,语言等而异,并且JavaScript不提供任何方法来获取适合当前文化和语言的特定于文化和语言的名称.

所以答案是"在按下键时是否可以获得键的名称?" 是:不是内置于JavaScript或浏览器中的任何内容.您需要查找表和/或库.请注意,不同的键盘布局可能会提供不同的映射.

keypress事件为匹配字符提供了匹配字符的字符代码(如果存在event.charCode,可以使用String.fromCharCode(event.charCode)),但不是keydown因为并非所有keydown字符都生成字符(与其他按键不同),实际上有时需要不止一个keydown创造一个角色.


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

var keyCode = event.which || event.keyCode || 0;
Run Code Online (Sandbox Code Playgroud)

event.which如果它存在和真实,或者event.keyCode如果它存在和真实,或者0如果它们既不存在又真实,那将使用它.大多数浏览器使用which; 很多版本的IE使用keyCode.

由于键"name"可能会包括改性剂,我会提到,有修饰符标志可在事件还有:event.shiftKey,event.ctrlKey,event.altKey,和event.metaKey.

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


小智 6

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

document.body.addEventListener('keyup', function(event) {
  console.log(event.key);
  console.log(event.code);
});
Run Code Online (Sandbox Code Playgroud)

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

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


资料来源:

event.key - W3schools
event.code - W3schools