【发布时间】:2014-10-09 13:19:55
【问题描述】:
我正在尝试通过在页面的<body> 上收听keypresses 和keydowns 来模拟SVG 中的<input type="text">。
Mac 上的重音字母似乎存在问题。您必须输入 Opt+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
向上:Þ 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