当 KeyboardEvent
触发时,您可以测试按下了哪个键,因为该事件包含您可以编写逻辑来处理的信息。
document.addEventListener("keydown", function(event) {
console.log(event.which);
})
例如,按下 a
,您将获得 65
。显然,最好是针对 which 编写逻辑,因为 keyCode
和 charCode
很复杂
event.which
属性将event.keyCode
和event.charCode
规范化。建议监控 event.which 以获取键盘键输入。
并且:
在按键事件中,按下的键的 Unicode 值存储在
keyCode
或charCode
属性中,但不会同时存储在两者中。如果按下的键生成一个字符(例如“a”),则charCode
设置为该字符的代码,并尊重字母大小写。(即,charCode
会考虑Shift
键是否被按下)。否则,按下的键的代码将存储在keyCode
中。
测试工具
键码值
以下表格包含来自 event.which
的值。
|
|
|
Zell Liew 发现,在 Firefox 中,这 3 个键码与其他浏览器不同
;
在 Firefox 中为 59,但在其他浏览器中为 186。=
在 Firefox 中为 61,但在其他浏览器中为 187。-
在 Firefox 中为 173,但在其他浏览器中为 189。
这些键码值仅在 keydown
和 keyup
事件期间有效。在 Mac 上,keypress
事件会提供完全不同的代码集。例如
键 | event.which 在 keydown 中 | event.which 在 keypress 中 |
a | 65 | 97 |
b | 66 | 98 |
c | 67 | 99 |
jQuery 建议使用
e.which
而不是e.keyCode
,因为它在所有浏览器中都是标准化的。它还会考虑
mouseup
和mousedown
。我不是要搞笑,只是想帮忙!
https://api.jqueryjs.cn/event.which/
我明显是说 mouseup,而不是 mouseus!
我同意这一点,我很久以前就停止使用
e.keyCode
了,因为我发现e.which
的支持更广泛。jQuery Hotkeys 插件怎么样?
https://github.com/tzuryby/jquery.hotkeys
很棒的小贴士 Chris,感谢分享!
我从来没有想到用 jQuery 了解键码会这么简单。
这是一篇关于键码支持和触发事件的不错的文章(有点过时了)。
我与该链接没有任何关联,只是我前几天偶然发现的,它恰好在这里也有效。
http://unixpapa.com/js/key.html
太棒了,我还在使用它
我仍然使用它,并且会一直使用它,直到每个浏览器都使用相同的属性!这很可能永远不会发生,所以我建议继续使用它!我的意思是,这里有一半的傻瓜说“我从未知道用 jQuery 这么简单”,他们一定不知道 jQuery 是一个 JavaScript 库 -_- 老程序员总是比这些新手“jQuery”程序员更厉害。他们真让我发笑!
var code = e.keyCode || e.which; // 是您所拥有内容的更短/更简洁的版本
@spyter: 只需知道,如果
e.keyCode === 0
,则它将是假值,并将贯穿到e.which
(这可能不是问题,但有可能)。哈哈哈,太聪明了
我发现 Apple 命令键是 224,而该列表中没有。
仅在 Firefox 中,在 Chrome 中为 93
抱歉,我的意思是 91
左命令键是 91,右命令键是 93。因此,在您的代码中,请检查两者。
我想要 alt+q = 键码?
要检测它,您需要查看
altKey
值我想要 alt+g = 键码?
@chriscoyier 该表似乎缺少
event.which
值为 32 的“空格” :)其他语言的键码呢?
刚刚发现,对于 event.which,仅在 FF 中,退格键是 8,箭头键是 0。在 Chrome 中,它不会为两者设置任何值。
您正在使用
element.onkeypress
,要获取箭头键,请使用element.onkeydown
。感谢您提供精确的复制粘贴,而且一次也不看!
我的意思是:“右括号”,只是为了好玩;)
请还添加这些
NUM_LOCK_MAC: 12,
F13: 124,
F14: 125,
F15: 126,
F16: 127,
F17: 128,
F18: 129,
F19: 130,
我想要 alt+q = 键码?
在使用 keyup 或 keydown 时,有一些冲突的键码,它们属于两个字符
188 , <
190 . >
191 / ?
192 ` ~
219 [ {
220 \ |
221 ] }
222 ‘ “
我尝试了以下操作,但不起作用
我认为这对你会有帮助
使用Google音译API,但是使用keypress。但我没有keypress的代码,请帮忙使用keypress使用Google API
71: g
alt+g
18: alt
按下alt键和g键。
如何区分大写字母和小写字母?
你无法区分大写和小写,因为keycode处理的是按下键,因此它不会区分大写和小写,就像它不会区分0和)一样。
在输入大写字母时,
keyCode
会返回不同的值,但仅在"keypress"
事件中!试试看 这个演示,你就会发现
"keyup"
和"keydown"
总是返回大写字母的keyCode
,而"keypress"
会返回小写字母的值。Firefox 15+ 返回 173 而不是 189 代表连字符。 jQuery 的 event.which 没有对此进行规范化。之前的版本返回 109。
这个列表非常好,也指出了不一致的地方
http://www.javascripter.net/faq/keycodes.htm
上面列表中的 186、187 和 189 不安全。
一个健壮的 Javascript 库,用于捕获键盘输入和输入的键组合。它没有依赖关系。
http://jaywcjlove.github.io/hotkeys/
hotkeys 理解以下修饰符:
⇧
、shift
、option
、⌥
、alt
、ctrl
、control
、command
和⌘
。以下特殊键可用于快捷键:
backspace
、tab
、clear
、enter
、return
、esc
、escape
、space
、up
、down
、left
、right
、home
、end
、pageup
、pagedown
、del
、delete
和f1
到f19
。谢天谢地!很棒的文章,一直在寻找它,终于可以用“KeyCode”方法识别键盘代码了 :) 干得好
很棒的文章
亲爱的朋友们,我修改游戏,但我仍然没有找到在 INI 文件中为向上箭头和向下箭头的键绑定设置什么。
如果有人能帮我,我很乐意听到你的消息。
Sven
您可以使用 Key.js 轻松检查 JavaScript KeyboardEvent 属性(e.key、e.code、e.which、
e.keyCode… 等等): https://keyjs.dev
这些可能是游戏中导航最相关的属性
向上箭头: 38
向左箭头: 37
向下箭头: 40
向右箭头: 39
数字键盘向上: 104
数字键盘向左: 100
数字键盘向下: 98
数字键盘向右: 102
W: 87
A: 65
S: 83
D: 68
charCode
、keyCode
和which
正在被弃用。它们将很快被event.key
替换,它将返回命名键因此,如果在控制台中输入“Hello World”,结果将是
对于移位字符,
event.shiftKey
仍然为真,但有一个新的方法可以检查修饰键(shift、alt、altGr、ctlr、capsLock、meta、OS 等),名为getModifierState
它将返回如下值
最低的 keycode 是 8 有什么原因吗?还是它仅仅是无缘无故的?
keyCodes 基于 ascii 表。
在文章中共享的 Codepen 中,event.which 没有区分大小写,当我按下小写“a”或大写“A”时,始终返回 65。我在这里理解错了吗?
keypress
事件中的代码将提供输入字符的正确 ASCII 字符等效项。试试 这个演示。请注意,
keypress
不包含某些特殊键的值,例如箭头键、插入键、删除键、Home 键、Page Up/Down 键等。我想知道 ctrlKey+c 的keycode是多少?
我尝试了这些
only: function(event) {
但它没有执行 :( … 你还有其他想法吗 :)
谢谢
如何获取 Ctrl+space 事件?
有人知道按下 1 键后,输入框会显示 I(大写字母 I(i))吗?
@chriscoyier 这篇文章需要尽快更新… 大多数浏览器现在支持 新的键盘事件,包括
getModifierState()
。http://codepen.io/Mottie/pen/bgZxod/
在 Safari 9 上监听
keydown
时,我得到不一致的evt.which
值,特别是对于像+
、-
等符号…如果我监听
keypress
,我会得到合理的值(ascii 值)。对于非字符键(如 箭头键)我需要坚持使用
keydown
。此外,如果您不想在用户按下并保持键位时事件被多次触发,那么
keypress
会很烦人。您好
我需要在 JS 代码中获得一些帮助,每当我输入任何字母单词,例如 a 或 b,我想要结果 1 + 2 = 3?这可能吗?请在这方面提供帮助
有没有一种方法可以编写在 WINDOWS 和 MAC 上都能正常运行的代码?
e.which 返回不同的值
您好。
如何在大多数浏览器中通过按钮点击执行 Ctrl + D 操作?
类似这样
“收藏夹
您好,如何输入数字并使其达到目标,比如我有一个计算器,我可以输入数字而不是按下它们
我可能错了,但看起来
e.key
现在是支持最广泛的推荐方法。现在 which、charCode 和 keyCode 已经弃用。
按下的键的 Unicode 值存储在 keyCode 或 charCode 属性中,但不会同时存储在两个属性中。如果按下的键生成一个字符,charCode 将设置为该字符的代码,区分大小写。(即 charCode 考虑
https://www.clickercounter.org/spacebar-clicker
前几天我一直在想如何输入数字并使其达到目标。假设我有一个计算器,我可以输入数字而不是按下计算器上的按钮。
很棒的文章!只想补充一下,输入类型 86 的 KeyboardEvent 值代表一个特定的键事件。了解这些值可以真正帮助您在应用程序中进行高级事件处理!