нажатие клавиш не рекомендуется, как получить символы, набранные пользователем? - PullRequest
0 голосов
/ 26 апреля 2019

Событие javascript keypress устарело:
https://developer.mozilla.org/en-US/docs/Web/API/Document/keypress_event

Некоторые люди советуют полагаться исключительно на событие keydown, например ::10000* Keydown isединственное событие клавиатуры, которое нам нужно
https://www.mutuallyhuman.com/blog/2018/03/27/keydown-is-the-only-keyboard-event-we-need/

Проблема в том, что keydown и keypress не являются синонимами.Критически, они не возвращают один и тот же символ во многих / большинстве случаев.Keydown представляет, какая клавиша на клавиатуре была нажата, в то время как keypress представляет, какой символ фактически набрал пользователь.

На английском языке различие важно в отношении регистра:

letter = String.fromCharCode(event.which); 

При нажатии клавиши «a» на клавиатуре буква будет «a» с keypress, ноэто «А» с keydown.

Ситуация усложняется с языками JCK, поскольку keypress получает правильные символы для международных раскладок клавиатуры, в отличие от keydown, который преобразует все в однобайтовые символы.

события keydown и keyup теперь запускаются во время композиции IME:
https://www.fxsitecompat.com/en-CA/docs/2018/keydown-and-keyup-events-are-now-fired-during-ime-composition/

Итак, с keypress не рекомендуется, что мы должны использовать, когда заботимся осимвол, который пользователь намеревался напечатать, учитывая регистр, не-ASCII-символы и многобайтовые символы?

Вопросы и ссылки по теме:

Событие keyup всегда возвращает заглавную букву => В ответе рекомендуется использовать keypress.

String.fromCharCode не работает при событии нажатия клавиши => В ответе рекомендуется использовать keypress.

String.fromCharCode при нажатии и нажатии клавиши возвращает неправильные символы => В ответе отмечается, что события keypress и keydown не являются взаимозаменяемыми.

Замена на устаревшую`keypress` DOM event => В ответе предлагается использовать keydown, не отмечая различий, которые он имеет в плане обработки регистра букв, не-ascii символов и многобайтовых символов.Кроме того, предлагаемая альтернатива beforeinput не поддерживает браузер.

Альтернатива для события нажатия клавиш в Firefox версии 65 + => Вопрос кратко опущен, с комментарием, предлагающим использовать keydown или beforeinput без устранения каких-либо ошибок, упомянутых выше.

...