Нет событий нажатия клавиш для определенных клавиш в браузере 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, чтобы просмотреть результат на смартфоне).
Ответы
Ответ 1
Я просто потратил время на эту проблему. Я развиваюсь на иврите, и все еврейские чартеры не являются для меня событием.
Я нашел решение, и я дам ему короткое объяснение перед
При использовании всех ключевых событий браузер выполняет поиск ключа, на который вы нажимаете. по какой-то причине все чартеры на другом языке с английского в родном браузере для Android неизвестны, и именно поэтому это не огонь, когда вы заполняете входной чартер.
решение заключается в поиске события на входе, а не на ключе. например, если у нас есть текст, метод .change() будет для нас отличным.
Я использую метод addEventListener() и работает как шарм.
это код
var exmpleInput = document.getElementById('input-id');
if(exmpleInput) {
exmpleInput.addEventListener("input", function() {
exampleFunction(this)
}, false);
}