Ниже код работает отлично в 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, чтобы просмотреть результат на смартфоне).