Сначала я подумал, что это ошибка, так как ожидаемое строчное значение возвращается для события keypress
. Оказывается, что на keyup/keydown
версия ключа ASCII в верхнем регистре / без смещения всегда возвращается.
По этой ссылке: http://www.javascriptkit.com/jsref/eventkeyboardmouse.shtml
Будьте осторожны при доступе к keyCode
собственность во время onkeydown или
Событие onkeyup, как оно установлено всякий раз
любая клавиша нажата, включая не
символьные клавиши типа «Shift». это
означает, что если вы попытаетесь нажать «Shift + a», чтобы
попробуйте получить ключ кода для «А», вы
всегда будет в конечном итоге получить два
вместо этого ключевые коды, один для "Shift" и
один для «А» в этом порядке. Что ты
не получится, независимо от того, код ключа
для "a" , поскольку keyCode всегда возвращает
значение Юникода в верхнем регистре
версия персонажа
- Нажатие Shift + a считается одним
keypress
событием.
- Нажатие Shift + a считается как два
keydown
события, когда клавиши нажаты, и два keyup
события, когда клавиши отпущены.
keypress
возвращает составное значение одной или нескольких клавиш, нажимаемых в унисон.
keydown
и keyup
возвращают значение одной клавиши , игнорируя любые комбинации клавиш.
Теперь вот запутанная часть: по какой-то причине несмещенное значение ключа a
возвращается в виде кода ключа 65. Но 65 в верхнем регистре A в таблице ASCII. Таким образом, где-то вдоль строки браузер берет строчную букву a (код ASCII 97), преобразуя ее в прописную букву A, а затем передавая keydown/keyup
как символ без смещения. Странно, не правда ли?