使用javascript检测键盘布局

时间:2012-01-17 09:30:05

标签: javascript jquery keyboard-layout

有没有办法使用JavaScript检测当前的键盘布局?我找到了this,  但它只检测访客是否在英文版面上。我需要知道确切的布局为字符串,例如de-chfren

6 个答案:

答案 0 :(得分:16)

我知道这个问题已经过时了,但是对于那些因某些键映射到其他语言环境中不同字符这一事实而受到阻碍的人来说,这是一种可以用来处理它的方法。

最有可能的是,您的键盘事件处理程序与keyup或keydown事件相关联;在这种情况下,event.which或event.keyCode属性的结果与用户按下的键相关联。例如,您用来键入';'的相同键EN布局中的键是用于在RU布局中键入“ж”的键,事件报告186作为两者的代码。

但是,如果您对按键产生的角色更感兴趣,则应使用“按键”事件。此事件在keydown / up之后触发,并报告在event.which或event.charCode中键入的字符的实际unicode代码点,在上面的示例中为十进制1078或U + 0436。

因此,如果您不想猜测键盘布局并且您不需要区分键盘/键盘,则按键可能是您的可行选择。它并不完美(大多数浏览器不会一直报告不打印字符的键上的按键事件,如修改键,功能键和导航键),但它比在处理可打印字符时猜测键码更好。

答案 1 :(得分:13)

键盘布局没有标准化标识符。它们具有布局创建者为其分配的名称。他们可能将语言关联作为一个定义的属性。

不应将键盘布局与语言或区域设置标识符混淆。特别是没有单一的“英语布局”,但有几十种布局可用于英语。

我认为系统通常不会通过JavaScript读取当前的布局设置。

因此,无论您通过检测键盘布局来解决什么问题,都需要采用不同的方法。

答案 2 :(得分:3)

您正在寻找的是如何检测他们的Locale。在HTTP标头中,它存储在Accept-Language标头中,但浏览器无法通过纯JS获取。

有一个名为“Browser Language”的jQuery插件可能会让你走上正确的道路。

答案 3 :(得分:0)

我对这个主题的所有了解并且已经为它实现了解决方案,就是检测非英语布局键盘,即使用除英语之外的任何其他字母的语言。解决方案依赖于正则表达式来匹配任何单词字符\w,任何数字字符\d和一系列预定义的英语键盘特殊字符,因此任何其他字符,如阿拉伯语,日语等,将不匹配,所有这些都使用keydown事件和我使用此解决方案来限制和通知登录表单中的用户名和密码字段条目。我把它打包成如下函数:

function checkKeyboard(ob,e){
        re = /\d|\w|[\.\$@\*\\\/\+\-\^\!\(\)\[\]\~\%\&\=\?\>\<\{\}\"\'\,\:\;\_]/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;
        }
    });

对于不知名的选民来说,这是Working DEMO

答案 4 :(得分:0)

您可以使用event.code从任何布局确定实际的关键位置,请尝试http://keycode.info/

答案 5 :(得分:0)

您现在可以使用 Navigator 界面返回的 Keyboard 对象。 此对象提供对检索键盘布局映射和从物理键盘切换捕获按键的功能的访问。

https://developer.mozilla.org/en-US/docs/Web/API/Keyboard

目前此功能是实验性的,仅适用于某些主要浏览器。