Обработка двойных событий в акцентированных клавиатурах

64
10

У меня есть специальный случай использования, когда у меня есть ряд полей ввода, и я переключаюсь с текущего поля ввода на другое на основе введенного символа. Его что-то вроде поиска по ключевым словам, где ключевые слова разделены пробелом или заключены в двойные кавычки. Итак, как только я закрываю двойную цитату вокруг слова "Индия", оно должно стать ключевым словом, и фокус должен перейти к следующему полю ввода.

Теперь я использую Mac с раскладкой клавиатуры US - International (ПК), которая позволяет мне вводить символы с акцентом. Например, "+ e = ë.

Что происходит сейчас, это если я напечатаю что-то вроде "что", а после второй цитаты, я попал в космос, фокус отлично перемещается в новое поле ввода, НО, новое поле ввода уже имеет "персонаж, предварительно заполненный в нем!

Некоторая отладка показала, что эта раскладка клавиатуры вызывает два события блокировки клавиатуры, один при вводе "и следующий, когда вы вводите пробел. Событие.keyCode для обоих этих событий (jQuery) равно 229, а в первом случае - событие. shiftKey - это true, а false - в следующем. То же самое можно сказать о том, что когда вы вводите "+ e, второй event.keyCode снова 229, что не соответствует ë.

Это помогает мне различать два события, но я ищу для этого более конкретное решение. На данный момент я не смог это решить.

Если у кого есть какие-то идеи, это будет здорово.

спросил(а) 2021-01-19T18:50:25+03:00 5 месяцев назад
1
Решение
89

Я сам решил проблему. Идея состоит в том, чтобы различать два события на основе event.shiftKey. Когда кто-то вводит двойную кавычку и намеревается ввести ее, event.shiftKey является истинным. Второе событие после двойной кавычки, если кто-то нажимает символ, в результате которого двойная кавычка и новый символ объединяются с акцентированным символом, новое активированное событие не имеет shiftKey = true, а event.keyCode = 229 ( что то же самое), поэтому это можно использовать для дифференциации. Если новое поле ввода все равно получает фантом ", поправки могут быть сделаны после обнаружения таких двух событий.

ответил(а) 2021-01-19T18:50:25+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема