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

时间:2014-05-28 11:55:02

标签: javascript jquery macos jquery-terminal

有人在github上报告了这个问题:dead keys on MacOS,在我的代码中,我使用keypress事件来插入字符(以及快捷键的keydown):

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

任何人都有使用jQuery在应用程序中修复此问题的经验?似乎在那个键盘上只有keydown被激活但不是按键。

这是唯一的解决方案:How can I eliminate dead keys on Mac OS X with international keyboard?

1 个答案:

答案 0 :(得分:1)

死键似乎只会为键本身触发keydow和ups +实际char的完整序列。按下^ + 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/

(德国版面/ 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();
    }
}