如何用jQuery解决OSX死键的问题

How to solve issue with OSX dead keys with jQuery?

本文关键字:问题 OSX 何用 jQuery 解决      更新时间:2023-09-26

有人在github上报告这个问题:MacOS上的死键,在我的代码中,我使用keypress事件插入字符(和keydown为快捷键)使用:

$(document.documentElement || window).bind('keypress.cmd', function(e) {
    ...
    self.insert(String.fromCharCode(e.which));
    ...
});

有人在使用jQuery修复这个应用程序的经验?在那个键盘上,似乎只有keydown被触发,而不是keypress。

这是唯一的解决方案:如何在Mac OS X上使用国际键盘消除死键?

死键似乎只触发键本身的上下键+实际字符的完整序列。以下是按死^ + u(产生û)时的序列:

down   192 c0 À
up     192 c0 À
down   85 55 U
press  117 75 u
up     85 55 U

这是死去的´ + u (= ú)

down   187 bb »
up     187 bb »
down   85 55 U
press  117 75 u
up     85 55 U

用Shift输入反刻度,因此序列为

down   16 10 
down   187 bb »
up     187 bb »
up     16 10 
down   85 55 U
press  117 75 u
up     85 55 U
http://jsfiddle.net/r8dMu/

(german layout/osx10.9/Chrome).

所以,解决方法可以像这样:

document.body.onkeydown  = function(e) { 
    if(e.which == 229) {
       input.value += "^";
       e.preventDefault();
    }
    if(e.which == 187 && e.shiftKey) {
       input.value += "`";
       e.preventDefault();
    }
}