使用javascript检测键盘布局

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

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

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

我认为系统通常不会通过JavaScript使其当前布局设置可读。

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

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

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

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

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

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

有一个名为“ 浏览器语言 ”的jQuery插件可能会让你走上正确的道路。

我所知道的关于这个主题并且已经实现了它的解决方案,就是检测非英语布局键盘, 即使用除英语之外的任何字母表的语言 。 解决方案取决于正则表达式匹配任何单词字符\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; } }); 

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