определить раскладку клавиатуры с помощью javascript

StackOverflow https://stackoverflow.com/questions/8892238

Вопрос

Есть ли способ определить текущую раскладку клавиатуры с помощью JavaScript?Я нашел это , но он только определяет, находится ли посетитель на английском макете.Мне нужно знать точный макет в виде строки, например, de-ch, fr или en.

Это было полезно?

Решение

Раскладки клавиатуры не имеют стандартных идентификаторов.Им присвоены имена создателем макета.Они могут иметь языковую ассоциацию как одно определенное свойство.

Раскладку клавиатуры не следует путать с идентификаторами языка или локали.В частности, нет единой «английской раскладки», а есть десятки раскладок, которые можно использовать для английского языка.

Я не думаю, что системы обычно делают свои текущие настройки макета читаемыми с помощью JavaScript.

Поэтому какую бы проблему вы ни пытались решить, определив раскладку клавиатуры, необходим другой подход.

Другие советы

Я знаю, что это старый вопрос, но для тех из вас, кто был в тупике из-за того, что некоторые ключи сопоставляются с разными символами в других регионах, вот подход, который вы можете использовать, чтобы справиться с этим.

Скорее всего, ваш обработчик событий клавиатуры привязан к событию нажатия или нажатия клавиши; результаты свойства event.which или event.keyCode в этом случае привязаны к той клавише, которую нажал пользователь. Например, тот же ключ, который вы используете для ввода ";" в макете EN это ключ, используемый для ввода 'ж' в макете RU, и событие сообщает 186 как код для них обоих.

Однако, если вас больше интересует символ, возникший в результате нажатия клавиши, вам следует вместо этого использовать событие 'keypress'. Это событие срабатывает после нажатия / нажатия клавиши и сообщает о фактическом коде Unicode символа, который был введен внутри event.which или event.charCode, который в приведенном выше примере является десятичным 1078 или U + 0436.

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

Вы ищете, как определить их локаль.В заголовках HTTP это хранится в Accept-Language заголовок, но он недоступен для браузера через чистый JS.

Существует плагин jQuery под названием Browser Language , который может помочь вамправильный путь.

Все, что я знаю об этой теме и уже реализовал для нее решение, - это обнаружение клавиатуры с неанглийской раскладкой, то есть языков, использующих любой алфавит, кроме английского .Решение зависит от регулярного выражения, которое соответствует любому генерируемому кодовому символу слова, любому цифровому символу, генерирующему кодовый код и диапазону предопределенных английских специальных символов клавиатуры, поэтому любые другие символы, такие как арабский, японский и т. Д., Не будут совпадать, все это использует событие нажатия клавишии я использую это решение для ограничения и уведомления полей имени пользователя и пароля при вводе в форму входа .Я упаковал его в функцию, подобную следующей:

общий

Затем вызовите функцию из события следующим образом:

общий

Это Рабочий ДЕМО для неизвестных избирателей.!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top