it-swarm.com.ru

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

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

16
Parzifal

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

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

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

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

12
Jukka K. Korpela

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

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

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

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

15
Nathaniel

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

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

3
synthesizerpatel

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

function checkKeyboard(ob,e){
        re = /\d|\w|[\.\[email protected]\*\\\/\+\-\^\!\(\)\[\]\~\%\&\=\?\>\<\{\}\"\'\,\:\;\_]/g;
      a = e.key.match(re);
      if (a == null){
        alert('Error 2:\nNon English keyboard layout is detected!\nSet the keyboard layout to English and try to fill out the field again.');
        ob.val('');
        return false;
      }
      return true;
    } 

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

$("#textFieldId").keydown(function(e){
        if (!checkKeyboard($(this),e)){
            return false;
        }
    });

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

0
SaidbakR