JQuery - нажатие персонажа - БЕСПЕРЕБОЙНАЯ КЛАВИАТУРА
Я пытаюсь получить символ, вставленный в текстовое поле/ввод с помощью jQuery.
Я использую обычный:
var character = String.fromCharCode( e.keyCode || e.which );
но единственная проблема возникает, когда я использую другую раскладку клавиатуры, которую я только что заметил.
Так, например, на стандартной американской клавиатуре он отлично работает. На немецкой клавиатуре для instanece, если у меня есть язык, установленный на английском языке - в основном, это стандартная американская клавиатура, когда я нажимаю символы, эквивалентные :;'\,./[]=-
, я получаю немецкие персонажи, которые я фактически вижу на своей клавиатуре (хотя английский эквивалент тогда добавляется на вход).
Пример: если я console.log( character )
для следующего предложения, я получаю:
- На входе:
[]\';/.,
- В консоли:
ÛݺÞܼ¾¿
Мой очевидный вопрос: как я могу убедиться в том, что вы ввели истинный вставщик символов?
Ответы
Ответ 1
Событие нажатия клавиши отличается от событий keyup и keydown, так как содержит нажатой клавишу. Попробуйте использовать это вместо этого. Проверьте это с помощью этого фрагмента:
$('body').keypress(function(e){
console.log('keypress', String.fromCharCode( e.which ));
});
$('body').keyup(function(e){
console.log('keyup', String.fromCharCode( e.which ));
});
Ответ 2
Что вы можете сделать, так это заставить символ появиться в скрытом текстовом поле и получить фактическое значение. Таким образом, вы получите персонажа. Вы в настоящее время передаете key code, как если бы он был символьным кодом. Они не совпадают.
http://jsfiddle.net/RQQpT/
(function() {
var input = $("<input>").appendTo('body') // an hidden input element
.css({ position: "absolute",
left: -500,
top: -500 });
$('body').bind({ keydown: function(e) {
input.focus(); // make characters appear in input element
},
keyup: function() {
var value = input.val(); // get value when key pressed
input.val(""); // reset value of input element
if(value) {
alert(value); // if there is a value, display it
}
}
});
})();