Подтвердить что ты не робот

JQuery - нажатие персонажа - БЕСПЕРЕБОЙНАЯ КЛАВИАТУРА

Я пытаюсь получить символ, вставленный в текстовое поле/ввод с помощью jQuery.

Я использую обычный:

var character = String.fromCharCode( e.keyCode || e.which );

но единственная проблема возникает, когда я использую другую раскладку клавиатуры, которую я только что заметил.

Так, например, на стандартной американской клавиатуре он отлично работает. На немецкой клавиатуре для instanece, если у меня есть язык, установленный на английском языке - в основном, это стандартная американская клавиатура, когда я нажимаю символы, эквивалентные :;'\,./[]=-, я получаю немецкие персонажи, которые я фактически вижу на своей клавиатуре (хотя английский эквивалент тогда добавляется на вход).

Пример: если я console.log( character ) для следующего предложения, я получаю:

  • На входе: []\';/.,
  • В консоли: ÛݺÞܼ¾¿

Мой очевидный вопрос: как я могу убедиться в том, что вы ввели истинный вставщик символов?

4b9b3361

Ответ 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
                         }
                     }
                  });
})();