按键事件。 " *"被视为" j"

时间:2015-05-13 09:01:11

标签: javascript keypress onkeypress

我尝试创建一个javascript事件,检测何时按下*键。 代码:

 function asterisk(e) {
     var evtobj = window.event ? event : e //distinguish between IE's explicit event object (window.event) and Firefox's implicit.
     var unicode = evtobj.charCode ? evtobj.charCode : evtobj.keyCode
     var actualkey = String.fromCharCode(unicode)
     alert(actualkey);
     if ((actualkey == "8" && evtobj.shiftKey) || actualkey == "*") {
         alert("banana");
         var tbbar = document.getElementById("tbBarcode");
         var tbam = document.getElementById("tbAmount");
         tbam.value = tbbar.value;
         tbbar.value = "";
         tbbar.focus();

     }
 }

当我按下数字键盘上的*键(键盘右侧,而不是shift + 8)时,警报显示" j"在" *" 为什么会这样?

1 个答案:

答案 0 :(得分:0)

我能够使用以下代码重现这种现象:

window.onkeydown=function(evt) {
    console.log(evt.keyIdentifier)
}

如果我按下*键(同样在小键盘上),它会产生keyIdentifer U + 004A,在UTF-8 Charset中,它等于'LATIN CAPITAL LETTER J'。

另请注意,我的代码仅适用于Chrome。

在Firefox中,evt.key正确生成Asterix,并且在两个浏览器中evt.keyCode生成Char Code 106,根据google应该等于'multiply'但是如果使用javascript转换实际上产生'j'。

这似乎是一个与javascript相关的问题。

我希望这些信息可以帮助那些人。

问候 spitterfly

编辑: 在mozilla开发人员网页上找到以下内容:

  

虽然大多数常见的Unicode值可以用一个16位表示   数字(在JavaScript标准化期间的早期预期)和   fromCharCode()可用于返回最多的单个字符   常见值(即UCS-2值,它们是UTF-16的子集   最常见的字符),以处理所有合法的Unicode   值(最多21位),fromCharCode()本身是不够的。自从   较高的代码点字符使用两个(较低值)“代理”数字   形成单个字符String.fromCodePoint()(ES6的一部分   草案)可用于返回这样一对,从而充分代表   这些价值较高的人物。

Mozilla Reference fromCharCode