Keycode всегда равен нулю в Chrome для Android

Мне нужно определить код ключа для пользовательского поля поиска на моем веб-сайте, но keycode всегда возвращается как ноль в Chrome для Android (за исключением backspace, который возвращает 8). Кто-нибудь еще испытал это, и как вы обошли его? Наш сайт работает во всех мобильных браузерах, кроме Chrome для Android, потому что мы не можем обнаружить ненулевой код или код.

Я запускаю Chrome 27.0.1453.90 на Android 4.1.2 Желе Bean. Проблема может быть дублирована с чем-то простым:
alert(event.keyCode);

Ответ 1

ниже решение также работает для меня. может быть полезным и для других.

var getKeyCode = function (str) {
    return str.charCodeAt(str.length - 1);
}

document.getElementById("a").onkeyup = function (e) {
    var kCd = e.keyCode || e.which;
    if (kCd == 0 || kCd == 229) { //for android chrome keycode fix
        kCd = getKeyCode(this.value);
    }
    alert(kCd)
}

Ответ 2

Мы столкнулись с этой проблемой недавно на китайском Android-телефоне Meizu MX3, который имеет сильно настроенную ОС на базе Android 4.4.4.

По умолчанию browswer и Chrome работают нормально, но по некоторым странным причинам мы не знаем, event.keyCode, event.charCode и . который возвращает все время в некоторых других браузерах (например, CM Browser или веб-просмотр приложения Wechat).

Мы решили это, проверив последний введенный вами символ, например "A" или "" (пробел), затем преобразуем его в ascii-код, используя charCodeAt, например "A".charCodeAt(0) который возвращает 97, который является фактическим char кодом, который нам нужен.

Но мы можем только определить код видимых символов char, используя эту стратегию, которая соответствует нашей нынешней необходимости, спасибо Богу.

Надеюсь, что вы, ребята, получите вдохновение от этого.

Ответ 3

Я столкнулся с той же проблемой с Android-устройствами SonyXperia и HTC. У меня есть гибридное приложение, где я проверяю текстовое поле "Сумма", считывая event.keyCode() введенного char в keydown событие из текстового поля, чтобы я мог разрешить ввод только чисел и точек (.) char. Я попытался, но это не сработало, так как всегда возвращалось 0 в этих устройствах. Позже я пришел с другим решением с keyup событием и char совпадением через регулярное выражение:

$("#AmountField").keyup(function (e) {

    var regex = /^[0-9\.]$/;
    var str = $(this).val();
    var subStr = str.substr(str.length - 1);
    if(!regex.test(subStr)) {

        if(str.length >0){
            $(this).val(str.substr(0, (str.length - 1)));
        }else{ 
            $(this).val();
        }

    }

});

Надеюсь, это поможет людям, столкнувшимся с этой проблемой. Удачи.

Ответ 4

Истинный способ получить keyCode - использовать

event.which

Это свойство объекта события стандартизирует свойство event.keyCode. Вы можете прочитать об этом также в документации jQuery здесь или в MDN здесь

Другими словами, у меня есть большой опыт работы с клавиатурными событиями на устройствах Android. У браузера Android иногда возникают проблемы с клавиатурой из-за фрагментации устройства (разные ПЗУ между устройствами или приложениями с внешней клавиатурой). Лучший способ - попытаться использовать все события клавиатуры (keydown, keyup и keypress) и сравнить каждый результат, чтобы получить нажатую клавишу.

Лучший способ - использовать в событии "вход" и получать все время последней чартерной. Событие ввода может управляться, как в моем ответе здесь.

Ответ 5

<input type="text" id="char" size="15" onblur="showKeyCode()" value="a">
<input type="button" value="Show Key Code" onclick="showKeyCode();">
<script>
function showKeyCode()
{
    var character = document.getElementById ( "char" ).value.substr(this.length - 1);
    var  code = character.charCodeAt();

    var stringall = document.getElementById ( "char" ).value;
    var msg = "The Key Code for the \""+character+"\" character is "+code+".";
    alert(msg);
 }
</script>

Для справки

Ответ 6

Если кто-то еще его копает. Проблема появляется на складе. Клавиатура Samsung для android.

Вместо этого используйте onkeyup.

Ответ 7

Я столкнулся с этой проблемой, и именно так я понял, как решить проблему.

  • Сначала вам нужно включить отладку USB на вашем Android-телефоне, чтобы вы можете видеть журналы вашего браузера на своем настольном компьютере.
  • Во-вторых, обновите веб-приложение на своем телефоне и внутри консоли на рабочем столе типа "monitorEvents (document)" или любой другой элемент, который вы хотите проверить.
  • Выполняйте действия, которые вы хотите проверить на своем телефоне.

И вот как я обнаружил, что событие keydown действительно было запущено уникальным событием с именем "textInput", которое содержит информацию внутри event.originalEvent.data.

Надеюсь, это сэкономит вам время и удачу!

Ответ 8

Необходимо использовать charCode вместо keyCode

<input type="text" onKeyPress="return funName(this,event)" />

<script language="javascript">
function funName(th,ev)
{   
   alert(ev.charCode);
}
</script>