Подтвердить что ты не робот

Нет событий нажатия клавиш для определенных клавиш в браузере Android

Ниже код работает отлично в Chrome, Firefox, на IPhone и даже в сторонних браузерах на Android. Тем не менее, при запуске внутри основного браузера ключевые события для специальных символов, таких как Å, Ä и... на моей шведской клавиатуре, просто не запускаются.

В этом примере пользователь должен вводить только один символ за раз. Работает как шарм, если я не нажимаю клавиши для андроида, такие как Å, Ä или Ö, для которых я могу ввести любое количество символов.

Здесь jsFiddle для тех, кто хочет попробовать: http://jsfiddle.net/x7H6f/. Если у вас нет специальных клавиш, таких как мои шведские, напечатанные на клавиатуре, символы типа é (hold E) должны делать "трюк".

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Key Event test</title>
    </head>
    <body>
        <input type="text" id="a" name="test" />
        <script>
            document.getElementById("a").onkeypress = function(e) {
                e = e || window.event;
                var k = e.keyCode || e.which;
                this.value = String.fromCharCode(k);
                return false;
        }
        </script>
    </body>
</html>

И нет, keydown и keyup тоже не работают. Я что-то пропустил, или это ошибка? Это ужасно раздражает при разработке шведских приложений в PhoneGap!

Спасибо!


EDIT: Как говорит Усадьба в своем ответе, можно использовать событие input. Здесь сценарий, демонстрирующий различия между событиями keypress, input и change: http://jsfiddle.net/Qxd76/ (используйте http://jsfiddle.net/Qxd76/show, чтобы просмотреть результат на смартфоне).

4b9b3361

Ответ 1

Я просто потратил время на эту проблему. Я развиваюсь на иврите, и все еврейские чартеры не являются для меня событием.

Я нашел решение, и я дам ему короткое объяснение перед

При использовании всех ключевых событий браузер выполняет поиск ключа, на который вы нажимаете. по какой-то причине все чартеры на другом языке с английского в родном браузере для Android неизвестны, и именно поэтому это не огонь, когда вы заполняете входной чартер.

решение заключается в поиске события на входе, а не на ключе. например, если у нас есть текст, метод .change() будет для нас отличным.

Я использую метод addEventListener() и работает как шарм.

это код

var exmpleInput = document.getElementById('input-id');
if(exmpleInput) {
    exmpleInput.addEventListener("input", function() {
        exampleFunction(this)
    }, false);
}