ОС-независимое событие клавиатуры для сопоставления символов
Очевидно, что веб-приложению необходимо настроить параметры клавиатуры пользователя, верно? Есть ли способ сказать Dojo, что нужно подключиться к реальному событию KeyPress вместо KeyDown, чтобы мы могли получить символ, набранный из event.charCode
?
Так как мы живем в международном мире, с несколькими операционными системами, а что нет, этой информации недостаточно, чтобы выяснить, какой символ в действительности набрал пользователь, если у меня нет встроенной в браузер функции для запроса операционной системы.
Например, на немецкой клавиатуре в Linux [достигается через Alt Gr-8, который отправляет клавишу Alt, а затем клавишу [. Хорошо, просто проигнорируй первую часть. В системе Windows с немецкой клавиатурой второе событие для 8 с ctrlKey и altKey, установленными в true. Я не думаю, что код JavaScript должен интерпретироваться жестко, потому что при других настройках клавиатуры эта комбинация клавиш будет фактически означать другой символ.
В качестве другого примера (вероятно, не подключенного к Dojo, а скорее другого программиста, извините за разглагольствование…), с американской клавиатурой на Mac вы не можете набирать немецкий символ ß в веб-интерфейсе outlook - потому что outlook фиктивен (!) перехватывает клавишу alt (которая на mac используется исключительно для изменения набираемых символов) для запуска действий, и, таким образом, alt-s переопределяется для обозначения send. Как правило, в середине слова, конечно.
3 ответа
Вы можете установить 5 dontFix
аргумент передан dojo.connect()
в true, что говорит о том, что он должен проходить как есть без специальной обработки. Смотрите https://github.com/dojo/dojo/blob/master/_base/connect.js#L32
event.charCode
содержит символ, полученный при нажатии клавиатуры, а не фактическую нажатую клавишу.
https://developer.mozilla.org/en/DOM/event.charCode
В случае нажатия клавиши значение Unicode нажатой клавиши сохраняется в свойстве keyCode или charCode, но не в обоих. Если нажатая клавиша генерирует символ (например, "a"), charCode устанавливается на код этого символа, с учетом регистра букв
edit: также см. https://developer.mozilla.org/en/Gecko_Keypress_Event, в нем содержится более проницательное объяснение того, как работает charCode (особенно в Gecko, но некоторые из них применимы и к другим браузерам). Вы можете найти это интересным:
... когда текущая выбранная раскладка клавиатуры создает символ Unicode (в соответствии с текущим состоянием CapsLock и NumLock), свойство charCode содержит этот символ
Использовать keypress
событие, целью которого является дать вам информацию о персонаже, набранном пользователем. Вам понадобится (причудливо) keyCode
собственность в IE а which
свойство в других браузерах; они дают вам набранный код символа.
Полная страница для ключевых событий JavaScript: http://unixpapa.com/js/key.html
document.onkeypress = function(e) {
e = e || window.event;
var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
alert(String.fromCharCode(charCode));
};