Shift是唯一可以改变keyCode值的键吗?

时间:2015-06-22 17:40:38

标签: javascript keycode

我正在编写一些javascript来处理键盘输入。在我的代码中的某一点,我假设keyCode for keyPress event != keyCode for keyDown event当且仅当shift键被按下时才会出现。{/ p>

这是正确的假设吗?或者这个条件有其他键吗?具体来说,我担心替代键盘布局,如AZERTY和QWERTZ。

1 个答案:

答案 0 :(得分:0)

假设是错误的。你看,每按一次键就会触发keydown事件。仅当所述键输出可打印字符时才会触发keypress事件。

话虽如此,在az之间按键,例如" a"将生成:

  1. keydown使用keyCode 65(A)
  2. keypress与keyCode 97(a)
  3. 因此,对于一般情况,它们并不相同。按下" SHIFT + a"将生成:

    1. keydown使用keyCode 16(Shift)
    2. keydown使用keyCode 65(A)
    3. keypress使用keyCode 65(A)
    4. 因此,当按下shift键时它们是相同的。

      对于数字键,行为被反转。按" 1"将生成

      1. keydown使用keyCode 49(1)
      2. keypress使用keyCode 49(1)
      3. 所以他们在没有按下Shift键的情况下是相同的,而按下" SHIFT + 1"将生成:

        1. keydown使用keyCode 16(Shift)
        2. keydown使用keyCode 49(1)
        3. keypress使用keyCode 33(!)
        4. 当按下Shift键时它们不相等。

          CAPS LOCK ON,默认情况下会将字母设置为大写,因此keyCodes将等于keydownkeypress。 CAPS LOCK不会影响数字键,因此它们仍然具有keydownkeypress相同的keyCodes。

          其他事件修饰符(例如CTRL,ALT以及它们与SHIFT的组合)不会生成可打印字符,因此在触发keydown事件时,不会发生keypress事件火。

          我做了一个小jsFiddle example来比较事件。当keypress和keydown一次被触发时,我添加了一些额外的逻辑来配对事件。