2016-04-20 2 views
11

На моей вкладке Samsung Galaxy 4 (Android 4.4.2, Chrome: 49.0.2623.105) Я столкнулся с ситуацией, когда KEYCODE всегда 229.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

+0

Я воспроизвел вашу проблему в браузере Chrome на Samsung Galaxy S4. Однако он отлично работает в браузере акций. –

ответ

-4

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

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

+5

Нет, event.which также показывает 229 к сожалению –

2

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

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

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

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

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

+0

Мне было бы интересно работать, но я сдался, и теперь я сосредоточен на решении, в котором я использую позицию каретки и сравниваю строку перед нажатием клавиши и после. Обратите внимание, что это решение работает не очень хорошо для таких клавиш, как SHIFT, CTRL и т. Д. –

1

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

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

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

+0

Пробовал это, и событие никогда не срабатывало для меня (panasonic hardpad). –

10

Нормальное нажатие клавиши событие не дает KEYCODE в устройстве Android. На этом уже был большой discussion.

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

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

Примечание: textInput не получить срабатывает на алфавитов, номер, забой, введите и несколько других ключей.

+0

Это решило мою проблему. Благодаря @Imamudin Naseem – Krunal

Смежные вопросы