【问题标题】:Detect accented chars typed on Mac?检测在 Mac 上键入的重音字符?
【发布时间】:2014-10-09 13:19:55
【问题描述】:

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

Mac 上的重音字母似乎存在问题。您必须输入 Opt+ea 才能获得 á,其他元音也一样。

我在身体上听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

向上:Þ 222(索引):30

向下:E 69(指数):27

新闻:é 233(索引):24

向上:E 69(索引):30

它工作正常。但在 Mac 上我得到:

下降:18(指数):27

向下:E 69(指数):27

向上:E 69(索引):30

上:18(索引):30

向下:E 69(指数):27

按:e 101(索引):24

向上:E 69

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

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

下降:18(指数):27

下降:å 229(指数):27

向上:E 69(索引):30

上:18(索引):30

下降:å 229(指数):27

向上:E 69(索引):30

无论我输入什么重音字母(éá,你可以说),它都会显示相同的 229 代码。

该日志与 Windows 中的 <body> 完全相同 - 即,它在 Windows 上的两个小提琴中都能正常工作且始终如一。

我正在最近的 Google Chrome 中进行测试(我不能发誓它是最新的,但它是最新的)。

停下来?!

【问题讨论】:

  • 输入重音字符是高度特定于操作系统的(请参阅stackoverflow.com/a/14546380/2564301)。 OSX 暂时保存重音代码并等待下一次按键。如果它可以找到匹配的重音字符,则将其发送给应用程序;如果没有,你会得到 两个 字符,首先是重音本身,然后是新字符。

标签: javascript html macos keypress


【解决方案1】:

你可以抓住选项键

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);
}

我的意思是在实际实现中,您可能希望创建一个函数来从数组或其他东西中获取重音字符代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 2014-01-17
    • 2018-09-27
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多