2016-02-23 1 views
0

Я пытаюсь получить значение ключа, нажав либо на keyPress, keydown, либо keyUp. Различные решения здесь хорошо работают на Chrome, FireFox, IE и т. Д. Однако они не работают на устройствах Android.Надежный способ получить значение keyEvent для «всех» браузеров, включая Mobile

Я попробовал несколько решений, вдохновленные из следующих SO:

Первое решение:

element.keydown(function (e) { 
    var keyCode = e.charCode || e.keyCode || e.which; 
    var digit = String.fromCharCode(keyCode); 

    // here digit is "å" on android using danish locale 
} 

KeyUp дает тот же результат. KeyPressed не будет гореть на хроме на Android.

Для воспроизведения я сделал plunkr, который показывает поведение:

https://plnkr.co/BVUfiJrBr0RBPDst9izD/

Он отлично работает на рабочем столе, но KEYCODE всегда 229 на андроид браузерах, независимо от нажатой клавиши.

Я воспроизвел ошибку на:

  • Samsung Galaxy S6, Android 5.1.1, браузер: Chrome 48.0.2564.95
  • Sony Experia Z2, Android 5.1.1, браузер: Chrome 48.0.2564.95

Он сделал работу на:

  • Samsung Galaxy S6, Android 5.1.1, браузер: Firefox
  • Iphone

Попытка воспроизвести ошибку указывает на ошибку в Chrome. Есть ли другой путь вокруг этой проблемы?

+0

Возможный дубликат [Клавиши захвата, введенные на виртуальной клавиатуре Android с использованием javascript] (https://stackoverflow.com/questions/30743490/capture-keys-typed-on-android-virtual-keyboard-using-javascript) – reyiyo

ответ

0

Вы пытались использовать событие input? Однажды столкнулась с подобной проблемой, и это помогло мне вернуться в Android с Android 4.4 (работало в FF, Chrome и Android в браузере).

Сделал небольшой пример fiddle. Надеюсь это поможет!

+0

К сожалению это не сработало. Он возвращает один и тот же символ для каждого типа ввода. – CodeTower

0

Мне просто пришлось решить это сам. В моем случае элемент является элементом ввода текста. В событии keyup (который запускается во всех браузерах) я размываю вход. Теперь все, что было введено, доступно в input.val(), и происходит событие изменения. Поэтому я добавляю функцию на событие изменения на входе, которое собирает введенное значение и возвращает фокус на вход. В моем случае мне нужен был только один персонаж. Я не тестировал это с ситуацией, когда кто-то быстро набирает текст, и браузер должен выполнить все это между быстрыми нажатиями клавиш.

Мой код выглядит следующим образом:

$('input').on('keyup', function(){ 
    $(this).blur(); 
}); 
$('input').on('change', function(){ 
    // my code to do what I want with the value that was entered, 
    // which thanks to the blur() I can get from input.val() 
    $(this).focus(); // return focus to the input so the user can continue 
}); 

Может быть, это поможет?

Смежные вопросы