Shift 是唯一可以改变 keyCode 值的键吗?
Is Shift the only key that can change the value of keyCode?
我正在编写一些 javascript 来处理键盘输入。在我的代码中,我假设 keyCode for keyPress event != keyCode for keyDown event
当且仅当按住 shift 键时。
这是一个正确的假设吗?或者是否有其他键满足此条件?具体来说,我担心其他键盘布局,例如 AZERTY 和 QWERTZ。
假设是错误的。你看,只要你按下一个键,就会触发 keydown
事件。 keypress
事件仅在所述键输出可打印字符时触发。
也就是说,按 a
和 z
之间的一个键,例如 "a" 将生成:
keydown
密钥代码为 65 (A)
keypress
密钥代码 97 (a)
所以一般情况下它们是不相等的。而按 "SHIFT + a" 将生成:
keydown
keyCode 16 (Shift)
keydown
密钥代码为 65 (A)
keypress
密钥代码 65 (A)
因此当按下 shift 键时它们是相等的。
对于数字键,行为是相反的。按“1”将生成
keydown
密钥代码为 49 (1)
keypress
密钥代码 49 (1)
因此它们在不按 Shift 键的情况下是相等的,而按 "SHIFT+1" 将生成:
keydown
keyCode 16 (Shift)
keydown
密钥代码为 49 (1)
keypress
密钥代码为 33 (!)
因此当按下 Shift 键时它们不相等。
启用大写锁定,默认情况下会将字母设置为大写,因此 keydown
和 keypress
的 keyCodes 将相等。 CAPS LOCK 不会影响数字键,因此它们对于 keydown
和 keypress
.
的键码仍然相同
其他事件修饰符(例如 CTRL、ALT 以及它们与 SHIFT 的组合)不会生成可打印字符,因此虽然会触发 keydown
事件,但不会触发 keypress
事件火.
我做了一个小jsFiddle example来比较事件。当 keypress 和 keydown 被同时触发时,我添加了一些额外的逻辑来配对事件。
我正在编写一些 javascript 来处理键盘输入。在我的代码中,我假设 keyCode for keyPress event != keyCode for keyDown event
当且仅当按住 shift 键时。
这是一个正确的假设吗?或者是否有其他键满足此条件?具体来说,我担心其他键盘布局,例如 AZERTY 和 QWERTZ。
假设是错误的。你看,只要你按下一个键,就会触发 keydown
事件。 keypress
事件仅在所述键输出可打印字符时触发。
也就是说,按 a
和 z
之间的一个键,例如 "a" 将生成:
keydown
密钥代码为 65 (A)keypress
密钥代码 97 (a)
所以一般情况下它们是不相等的。而按 "SHIFT + a" 将生成:
keydown
keyCode 16 (Shift)keydown
密钥代码为 65 (A)keypress
密钥代码 65 (A)
因此当按下 shift 键时它们是相等的。
对于数字键,行为是相反的。按“1”将生成
keydown
密钥代码为 49 (1)keypress
密钥代码 49 (1)
因此它们在不按 Shift 键的情况下是相等的,而按 "SHIFT+1" 将生成:
keydown
keyCode 16 (Shift)keydown
密钥代码为 49 (1)keypress
密钥代码为 33 (!)
因此当按下 Shift 键时它们不相等。
启用大写锁定,默认情况下会将字母设置为大写,因此 keydown
和 keypress
的 keyCodes 将相等。 CAPS LOCK 不会影响数字键,因此它们对于 keydown
和 keypress
.
其他事件修饰符(例如 CTRL、ALT 以及它们与 SHIFT 的组合)不会生成可打印字符,因此虽然会触发 keydown
事件,但不会触发 keypress
事件火.
我做了一个小jsFiddle example来比较事件。当 keypress 和 keydown 被同时触发时,我添加了一些额外的逻辑来配对事件。