Надежный способ получить значение keyEvent для "всех" браузеров, включая Mobile

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

Я попробовал несколько решений, вдохновленных следующим 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 не будет работать на Chrome на Android.

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

https://plnkr.co/BVUfiJrBr0RBPDst9izD/

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

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

  • 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. Есть ли другой способ обойти эту проблему?

2 ответа

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

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

Я просто должен был решить это сам. В моем случае этот элемент является элементом ввода текста. На событии 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
});

Может это поможет?

Другие вопросы по тегам