检测在Mac上键入的重音字符?

时间:2014-08-15 19:06:16

标签: javascript html macos keypress

我正在尝试通过在页面的<input type="text">上收听keypress es和keydown来模拟SVG中的<body>

Mac上的重音字母似乎存在问题。您必须输入选择 + e a 获取á,其他元音则相同。

我正在聆听身体like this (JSFiddle)

var theElement = document;
theElement.onkeypress = function(e) {
    console.log("Press: " + String.fromCharCode(e.keyCode) + " " + e.keyCode);
}
theElement.onkeydown = function(e) {
    console.log("Down: " + String.fromCharCode(e.keyCode) + " " + e.keyCode);
}
theElement.onkeyup = function(e) {
    console.log("Up: " + String.fromCharCode(e.keyCode) + " " + e.keyCode);
}

在Windows上,输入é我会收到以下日志:

  

向下:Þ222(指数):27

     

Up:Þ222(指数):30

     

向下:E 69(指数):27

     

按:é233(索引):24

     

Up:E 69(指数):30

它运作正常。但是在Mac上我得到了:

  

向下:18(指数):27

     

向下:E 69(指数):27

     

Up:E 69(指数):30

     

Up:18(指数):30

     

向下:E 69(指数):27

     

按:e 101(索引):24

     

Up:E 69

18是向上或向下按下的 Option 键,但它似乎忘记了重音正在尝试输入,我只是按下了e字符。

即使更奇怪,当我将相同的事件附加到<input type="text">框时,我会在é上再次输入input(再次,在Mac中),但新闻事件显示标准e而不是重音标记JSFiddle):

  

向下:18(指数):27

     

向下:å229(指数):27

     

Up:E 69(指数):30

     

Up:18(指数):30

     

向下:å229(指数):27

     

Up:E 69(指数):30

无论我输入的重音字母(éá,您的名字)都没关系,它显示相同的229代码。

该日志与Windows中的<body>日志完全相同 - 即,它在Windows上的两个小提琴中都可以正常工作。

我正在最近的谷歌浏览器中测试两者(我不能发誓它是最新的,但它是最新的)。

HALP?!

1 个答案:

答案 0 :(得分:0)

你可以抓住选项键

var theElement = document;
theElement.onkeypress = function(e) {
    if (theElement.accent === true)
        console.log("Press: " + String.fromCharCode(e.keyCode) + " (accented) " + e.keyCode);
    else 
        console.log("Press: " + String.fromCharCode(e.keyCode) + " " + e.keyCode);
}
theElement.onkeydown = function(e) {
    theElement.accent = true;
    if (theElement.accent === true)
        console.log("Press: " + String.fromCharCode(e.keyCode) + " (accented) " + e.keyCode);
    else 
        console.log("Press: " + String.fromCharCode(e.keyCode) + " " + e.keyCode);
}
theElement.onkeyup = function(e) {
    theElement.accent = false;
    if (theElement.accent === true)
        console.log("Press: " + String.fromCharCode(e.keyCode) + " (accented) " + e.keyCode);
    else 
        console.log("Press: " + String.fromCharCode(e.keyCode) + " " + e.keyCode);
}

我的意思是在实际实现中你可能想要创建一个函数来从数组中获取重音字符代码。