键下键码不返回预期的字符串值

我在我的应用程序中使用了iframe 。 当我按下键盘上的任意键时,我返回字符串值。

除键219 ,220, 221之外219 ,220, 221所有其他键都返回预期的字符串值。

这些键返回"Û", "Û", "Ý"这些值。

但我期待"[", "]", "\"这些字符串值。

如何从这些键中获取正确的字符?

keydownkeyup使用的密钥代码可能因键盘而异,具体取决于您输入的键盘类型(不同区域的不同键盘等)。

对于可打印字符,您需要等待浏览器发出keypress ,它会为您提供字符键的翻译值(如果有的话),它会在charCode为您提供(尽管我会倾向于使用e.charCode || e.which ;也许这很傻)。 例如,我的键盘上有一个键,在* nix下我配置的方式是keydown / keyup键码220,并生成字符£ 。 但是在运行具有不同键盘布局的Windows的虚拟机中,相同的键是用于keydown / keyup键码220,但是生成字符#

例:

 function handler(e) { var msg = "Received " + e.type; if (e.type === "keypress") { // keypress msg += " '" + String.fromCharCode(e.charCode || e.which) + "'"; } else { // keydown/keyup msg += " " + (e.which || e.keyCode); } console.log(msg); } document.addEventListener("keydown", handler, false); document.addEventListener("keyup", handler, false); document.addEventListener("keypress", handler, false); 
 Click here to focus the document, then press keys.