keypress和keydown上的String.fromCharCode返回错误的字符

时间:2015-07-24 13:57:37

标签: javascript jquery unicode utf-8 keycode

我正在尝试捕捉在屏幕上显示之前插入的字符以验证屏幕。看我的代码

_this.on('keypress keydown',function(e){
    var t = e.target;
    var k = e.which || e.keyCode;
    var c = String.fromCharCode(k);
    console.log(String.fromCharCode(k))
});

如果我输入~或任何其他标点字符,则会返回非拉丁字符,例如å。我在Ubuntu的Chromium上。

我注意到使用这些特殊字符忽略了按键,这是一种耻辱,这也是我尝试使用keydown的原因。但是keydown无法检测到正确的角色并将其转换为斯堪的纳维亚和亚洲角色。

是否有解决方法来获得正确的角色?

1 个答案:

答案 0 :(得分:3)

请参阅this wonderful answer一个类似的问题,以及相关的jsfiddle:http://jsfiddle.net/S2dyB/17/

一个问题是keypresskeydown事件不可互换。 keypress用于检索键入的实际字符(因此忽略特殊键),而keydown返回键盘上每个键的唯一字符代码。为了加剧这种情况,不同的浏览器会以不同的方式处理每个事件,使其变得非常混乱。

了解e.whichkeydown之间keypress的变化情况:http://jsfiddle.net/9TyzP/

正如您所看到的,它们很少匹配 - 并且对于许多键,keypress的显示代码根本没有变化,表明该事件没有触发该键。