ОС-независимое событие клавиатуры для сопоставления символов - PullRequest
1 голос
/ 01 сентября 2011

Очевидно, что веб-приложению необходимо настроить параметры клавиатуры пользователя, верно? Есть ли способ сообщить Dojo о подключении к реальному событию KeyPress вместо KeyDown, чтобы мы могли получить символ, набранный из event.charCode?

Поскольку мы живем в международном мире с множеством операционных систем, а что нет, этой информации недостаточно, чтобы выяснить, какой символ на самом деле набрал пользователь, если только у меня нет встроенной в браузер функции для запроса операционной системы.

Например, на немецкой клавиатуре в Linux [достигается через Alt Gr-8, которая посылает клавишу Alt, а затем клавишу [. Хорошо, просто проигнорируй первую часть. В системе Windows с немецкой клавиатурой второе событие для 8 с ctrlKey и altKey, установленными в true. Я не думаю, что код JavaScript должен интерпретироваться жестко, потому что при других настройках клавиатуры эта комбинация клавиш будет фактически означать другой символ.

В качестве другого примера (вероятно, не подключенного к Dojo, а скорее другого глюка программиста, извините за разглагольствование ...), с американской клавиатурой на mac вы не можете ввести немецкий символ ß в веб-интерфейсе outlook - потому что outlook bogusly (!) перехватывает клавишу alt (которая на mac используется исключительно для изменения набираемых символов) для запуска действий, и alt-s, таким образом, переопределяется для обозначения send Обычно в середине слова, конечно.

Ответы [ 3 ]

2 голосов
/ 01 сентября 2011

event.charCode содержит символ, полученный при нажатии клавиатуры, а не фактическую нажатую клавишу.

https://developer.mozilla.org/en/DOM/event.charCode#Notes

В событии нажатия клавиши UnicodeЗначение нажатой клавиши сохраняется в свойстве keyCode или charCode, но не в обоих.Если нажатая клавиша генерирует символ (например, «a»), charCode устанавливается на код этого символа с учетом регистра букв

edit: Также см. https://developer.mozilla.org/en/Gecko_Keypress_Event, содержит более глубокое объяснение того, как работает charCode (особенно в Gecko, но некоторые из них применимы и к другим браузерам).Это может показаться вам интересным:

... когда текущая выбранная раскладка клавиатуры создает символ Unicode (согласно текущему состоянию CapsLock и NumLock), свойство charCode содержитэтот персонаж

1 голос
/ 01 сентября 2011

Вы можете установить для 5-го dontFix аргумента, переданного dojo.connect(), значение true, что говорит о том, что он должен проходить как есть без специальной обработки.Смотри https://github.com/dojo/dojo/blob/master/_base/connect.js#L32

0 голосов
/ 01 сентября 2011

Используйте событие 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));
};
...