Предположение ошибочно. Видите ли, событие keydown
запускается всякий раз, когда вы нажимаете клавишу. Событие keypress
запускается только тогда, когда указанный ключ выводит печатный символ.
При этом, нажатие клавиши между a
и z
, например, "а" будет генерировать:
keydown
с KeyCode 65 (A)
keypress
с KeyCode 97 (а)
Таким образом, они не равны для общего случая. В то время как нажатие "SHIFT + A" будет генерировать:
keydown
с KEYCODE 16 (Shift)
keydown
с KEYCODE 65 (A)
keypress
с KEYCODE 65 (A)
Так они равны при нажатии клавиши сдвига.
Для цифровых клавиш поведение инвертируется. Нажатие кнопки "1" будет генерировать
keydown
с KEYCODE 49 (1)
keypress
с KEYCODE 49 (1)
Таким образом, они равны, не нажимая на клавишу, в то время как нажатие «SHIFT + 1" будет генерировать:
keydown
с KeyCode 16 (Сдвиг)
keydown
с KEYCODE 49 (1)
keypress
с KEYCODE 33 (!)
Таким образом, они не равны, когда нажата клавиша переключения.
Имея CAPS LOCK ON, по умолчанию устанавливаются буквы в верхний регистр, поэтому коды клавиш будут равны для keydown
и keypress
. CAPS LOCK не влияет на числовые клавиши, поэтому они будут иметь одинаковые коды клавиш для keydown
и keypress
.
Другие модификаторы событий, такие как CTRL, ALT и их комбинация с SHIFT, не будут генерировать печатные символы, поэтому, когда будет запущено событие keydown
, произойдет событие keypress
.
Я сделал небольшой jsFiddle example, чтобы сравнить события. Я добавил немного дополнительной логики, чтобы спарить события, когда нажатие и сбой запускаются сразу.
Как насчет клавиш CTRL и ALT? – Pointy
Команда на mac? – Alp
Это помогает предоставить реальный код, который вы написали – tvgemert