Intereting Posts
Автоматический сброс буфера при использовании OpenGL на Android Как заменить значок гамбургера, который используется для ActionBarToggle на панели инструментов Android, с пользовательской возможностью рисования? Запустите Android на виртуальной машине для разработки Ошибка добавления пользовательской темы в приложение. Phonegap 3.0 – Android: встроенная панель прокрутки не видима Как центрировать текст в tabhost? Получить координаты GPS: Android Правильный шаблон для приобретения WakeLock в BroadcastReceiver и его выпуск в службе Ваш код версии APK должен быть выше 378 Как прокручивать вверх / вниз нижнюю панель при прокрутке RecyclerView Уведомление о брандмауэре Android запускает новое приложение, хотя оно уже запущено. Как синхронизировать запуск приложения со значком приложения и уведомлением staus bar? Один метод для реализации onTouchListener () для нескольких кнопок Как имитировать разрешения для тестирования на Android? Поместить большое изображение в ImageView не работает Android Pay – тестирование со стороны США

Кросс-браузер get keyCode

Я пытаюсь получить кросс-браузерный способ прослушивания keyCode пользовательского keyDown .

Для мобильных браузеров мне приходится запускать виртуальную клавиатуру, поэтому я использую вход, скрытый css, вызванный событием click . Это хорошо работает, за исключением того, что когда я пытаюсь прослушать keycode, на fennec (mobile Firefox), у меня странное поведение.

Вот функция, которую я использую для прослушивания keycode .

 document.querySelectorAll('input')[0].addEventListener('keydown', handler); function handler(e) { e.preventDefault(); var k = (e.which) ? e.which : e.keyCode; document.getElementById('log').innerHTML = k; this.style.backgroundColor = "#FFAAFF"; } 
 <input type="text" /> <span id="log"></span> 

  • В Firefox для android (v34 – v37) он не срабатывает, пока пользователь не наберет return .
    Фактически, я обнаружил, что если значение входа не пустое, оно работает хорошо , по крайней мере, при загрузке. Поэтому я подумал об if(this.value=='')this.value='*'; пути, подобном этому: if(this.value=='')this.value='*'; Кажется, что нужно работать, но если вы спамете его, backspace ⌫ не блокируется, поэтому, когда вход очищается, ошибка возвращается: обходной путь также не срабатывает.
    + Это уродливое обходное решение, которое, я уверен, создаст другие ошибки в других браузерах.

     document.querySelectorAll('input')[0].addEventListener('keydown', handler); function handler(e) { if(this.value=='')this.value='*'; e.preventDefault(); var k = (e.which) ? e.which : e.keyCode; document.getElementById('log').innerHTML = k; this.style.backgroundColor = "#FFAAFF"; } 
     <input type="text" value="*"/> <span id="log"></span> 
  • В B2G (Firefox Os 1.3 на эмуляторе устройства или 2.0) поведение еще более четкое:
    Функция только считывает keyCode для backspace ⌫ ( keycode 8 ) или возвращает клавиши ⏎ (keyCode 13 ). Любой другой ключ вернет 0 .

Итак, мой вопрос: знаете ли вы, что лучше использовать кросс-браузер для прослушивания keyCode , который работает во всех основных браузерах, на рабочем столе или на мобильных устройствах и на fennec ?

Ps: даже если я напишу свое приложение в vanilla-js, мне будет хорошо видеть решения с любой библиотекой.

Solutions Collecting From Web of "Кросс-браузер get keyCode"

Существует не идеальное решение для прослушивания KeyCode между браузерами и ОС … Просто потому, что javascript использует те же ключевые коды, о которых сообщает операционная система, где она работает. Вам будет лучше использовать input событие вместо keyDown

В соответствии с этим сайтом событие input происходит, когда текстовое содержимое элемента изменяется через пользовательский интерфейс, который вы хотите, потому что в некоторых мобильных браузерах / событиях ОС не срабатывает, пока пользователь не войдет во вход и событие change пожары.

http://jsfiddle.net/n8gv21a1/