我正在编写一些javascript来处理键盘输入。在我的代码中的某一点,我假设keyCode for keyPress event != keyCode for keyDown event
当且仅当shift键被按下时才会出现。{/ p>
这是正确的假设吗?或者这个条件有其他键吗?具体来说,我担心替代键盘布局,如AZERTY和QWERTZ。
答案 0 :(得分:0)
假设是错误的。你看,每按一次键就会触发keydown
事件。仅当所述键输出可打印字符时才会触发keypress
事件。
话虽如此,在a
和z
之间按键,例如" a"将生成:
keydown
使用keyCode 65(A)keypress
与keyCode 97(a)因此,对于一般情况,它们并不相同。按下" SHIFT + a"将生成:
keydown
使用keyCode 16(Shift)keydown
使用keyCode 65(A)keypress
使用keyCode 65(A)因此,当按下shift键时它们是相同的。
对于数字键,行为被反转。按" 1"将生成
keydown
使用keyCode 49(1)keypress
使用keyCode 49(1)所以他们在没有按下Shift键的情况下是相同的,而按下" SHIFT + 1"将生成:
keydown
使用keyCode 16(Shift)keydown
使用keyCode 49(1)keypress
使用keyCode 33(!)当按下Shift键时它们不相等。
CAPS LOCK ON,默认情况下会将字母设置为大写,因此keyCodes将等于keydown
和keypress
。 CAPS LOCK不会影响数字键,因此它们仍然具有keydown
和keypress
相同的keyCodes。
其他事件修饰符(例如CTRL,ALT以及它们与SHIFT的组合)不会生成可打印字符,因此在触发keydown
事件时,不会发生keypress
事件火。
我做了一个小jsFiddle example来比较事件。当keypress和keydown一次被触发时,我添加了一些额外的逻辑来配对事件。