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

时间:2016-08-09 09:17:19

标签: javascript jquery key-events

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

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

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

但我希望"[", "]", "\"这些字符串值。

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

1 个答案:

答案 0 :(得分:3)

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.