Intereting Posts
Android: View.getTag / setTag и IllegalArgumentException Плагин iBeaconGap Cordova на базе библиотеки Android RadiusNetwork Android achartengine – Как распознать, какой бар затронут на гистограмме? Не удалось загрузить класс com.android.build.gradle.managed.NdkConfig $ Impl Как добавить символы валюты в формате pdf, созданные моим приложением? Не удается удалить оверлей Как безопасный вход в мое приложение для Android с использованием facebook-id? Кнопка setText с Spannable не работает для Android 5.0 Lollipop Не удалось включить INSERT в SQLite, код ошибки: 19 Активность просочилась IntentReceiver Активность, запущенная из широковещательного приемника, сохраняет в последнее время задачи, несмотря на то, что они были закончены Как реализовать увеличение анимации числа от 0 до 600 за 5 секунд на TextVIew на Android Передача данных между внешним профилем приложения и внутренним профилем в Android Lollipop Слушатель событий в фоновом режиме Javascript переопределяет кнопку обратной связи устройства Android Библиотека привязки данных Android в Xamarin.Android

Кросс-браузер 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, мне будет хорошо видеть решения с любой библиотекой.

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

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

http://jsfiddle.net/n8gv21a1/