JS: как получить локализованный символ на нажатие клавиши? - PullRequest
8 голосов
/ 24 марта 2011

Мне нужно получить локализованный символ при нажатии клавиши. Например: на чешской клавиатуре мне нужно получить ř не 5 символов (код клавиши 53) (см. раскладка чешской клавиатуры ). Есть ли другой способ получить символ и не использовать ввод текста и чтение значения? Другими словами, есть ли способ получить символ из объекта события с учетом текущей раскладки клавиатуры пользователя?


(добавлен пример кода)

<html>
<body>
<script language="JavaScript">
function onLoad() {
    console.log(document.getElementById("test"));
    document.getElementById("test").onkeydown = function(event) {
                console.log("Code: "+event.keyCode+"; Key: "+String.fromCharCode(event.keyCode));
        }
}
</script>
<body onLoad="onLoad();">
    <input id="test">
</body>
</html>

(пример онлайн )

Когда вы попробуете этот код и нажмете клавишу ř, вы увидите в консоли Firebug «Код: 53; Ключ: 5». И мне нужно получить «ř», а не «5».

Я думаю, что эта "проблема" появляется на всех неанглийских клавиатурах.

Ответы [ 2 ]

15 голосов
/ 24 марта 2011

Использование события keypress даст вам набираемый символ независимо от раскладки клавиатуры.

document.onkeypress = function(evt) {
    evt = evt || window.event;
    var charCode = evt.which || evt.keyCode;
    var charTyped = String.fromCharCode(charCode);
    alert("Character typed: " + charTyped);
};

Вот моя обычная ссылка на превосходную страницу Яна Вольтера, документирующую обработку ключей JavaScript: http://unixpapa.com/js/key.html

1 голос
/ 26 октября 2016

И убедитесь, что вы используете событие «нажатие клавиши», но не событие «нажатие клавиши».

Если вы используете «нажатие клавиши» String.fromCharCode(event.keyCode || event.which), оно не вернет вам локализованный символ.По крайней мере, это была проблема для меня в OS X с Chrome / FF.

...