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

时间:2016-06-09 12:00:23

标签: javascript javascript-events keypress

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

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

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

3 个答案:

答案 0 :(得分:7)

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

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

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

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

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

如果它存在且真实,则使用event.which;如果它存在且真实,则使用event.keyCode;如果不存在和真实,则使用0。{p}大多数浏览器使用which;许多版本的IE使用keyCode

因为一个键"名称"可能会包含修饰符,我还提到事件中还有可用的修饰符标记:event.shiftKeyevent.ctrlKeyevent.altKeyevent.metaKey

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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