Сначала я подумал, что это ошибка, так как ожидаемое значение нижнего регистра возвращается для события keypress
. Оказывается, что на keyup/keydown
всегда возвращается ASCII прописная/несмещенная версия ключа.
С этой ссылкой: http://www.javascriptkit.com/jsref/eventkeyboardmouse.shtml
Будьте осторожны при обращении к свойству KEYCODE во время OnKeyDown или OnKeyUp события, так как она устанавливается, когда нажатием любой клавиши, в том числе не символьных клавиш, как «Shift ». Это означает, что если вы попытаетесь нажать «Shift + a» на , попробуйте и получите keyCode для «A», вы в всегда получите два ключа , а для «Shift» и один для «A» в этот заказ. То, что вы не получите независимо является KEYCODE для «а», , как KEYCODE всегда возвращает значение Юникода версии символа
- Нажатие клавиши Shift прописные + а считается, что одиночный
keypress
мероприятие.
- Нажатие Shift + a считается как два события
keydown
, когда клавиши нажаты, и два события keyup
, когда клавиши отпускаются.
keypress
возвращает состав значение одной или нескольких нажатых клавиш в унисон.
keydown
и keyup
вернуть значение одной клавишей при игнорировании любых комбинаций клавиш.
Теперь вот запутанная часть: по какой-то причине несмещенного значение ключа a
возвращается как код ключа 65. Но 65 заглавных А в таблице ASCII. Итак, где-то вдоль линии браузер берет строчную букву a (код ASCII 97), преобразуя ее в верхний регистр A, а затем передавая ее keydown/keyup
в качестве несмещенного символа. Странно, не так ли?
Не уверен, что я бы назвал поведение «странным», это просто соглашение. https://developer.mozilla.org/en/DOM/event.charCode отмечает, что случай не соблюдается для событий keyCode. «KeyCode» сообщает вам, какой * ключ * был нажат, а не символ, который является результатом его. И поскольку все буквы напечатаны в верхнем регистре практически на всех клавиатурах, кажется, имеет смысл использовать вариант с верхним регистром. Хороший ответ в противном случае. :) – deceze