KeyCode на android всегда 229

На моей вкладке Samsung Galaxy 4 (Android 4.4.2, Chrome: 49.0.2623.105) Я столкнулся с ситуацией, когда keyCode всегда 229.

Я установил простой тест для двух ситуаций

<div contenteditable="true"></div> <input> <span id="keycode"></span> 

сценарий:

 $('div, input').on('keydown', function (e) { $('#keycode').html(e.keyCode); }); 

DEMO

К счастью, я могу найти сообщения об этом, но я не смог найти его с рабочим решением. Кто-то предложил вместо этого использовать keyup или использовать событие textInput , но этот только запускается при blur .

Теперь, чтобы все это произошло, этого не происходит с браузером акций по умолчанию 🙁

Любая помощь будет оценена!

UPDATE: Если выяснится, что это невозможно, я все равно могу захватить символ перед каретой: post

Solutions Collecting From Web of "KeyCode на android всегда 229"

Обычное событие нажатия клавиши не дает keyCode в устройстве Android. Об этом уже шла большая дискуссия .

Если вы хотите захватить печать space bar или special chars , вы можете использовать событие textInput .

 $('input').on('textInput', e => { var keyCode = e.originalEvent.data.charCodeAt(0); // keyCode is ASCII of character entered. }) 

Примечание: textInput не запускается по алфавиту, номеру, обратному пространству, enter и нескольким другим клавишам.

Запуск в ту же проблему, только с клавиатурой Samsung на Android. Работа вокруг заключалась в том, чтобы отключить предсказания клавиатуры, которые фиксировали вход. Все еще анализируя далее, чтобы увидеть, можно ли найти работу на земле JS.

Изменить: мне удалось найти решение для нашего дела. Случилось то, что у нас был белый список разрешенных символов, которым пользователю разрешалось вводить в поле ввода. Это были буквенно-цифровые символы плюс некоторые управляемые символы белого цвета (например, введите, esc, вверх / вниз). У любого другого символьного ввода было бы предотвращено событие по умолчанию.

Случилось так, что все события с кодом 229 были предотвращены, и в результате текст не был введен. Как только мы добавили в белый список код 229, все вернулось к функционированию нормально.

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

Надеюсь, это поможет кому-то.

У меня была такая же проблема на телефонах Samsung S7. Решил его, заменив событие от нажатия клавиш до нажатия клавиши .

 $("div, input").keypress(function (e) { $("#keycode").html(e.which); }); 

JQuery нормализует этот материал, поэтому нет необходимости использовать что-либо другое, кроме e.which https://stackoverflow.com/a/302161/259881

Попробуйте e.which вместо e.keyCode

Для получения дополнительной информации об этом свойстве проверьте https://api.jquery.com/event.which/