我尝试创建一个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"在" *" 为什么会这样?
答案 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的一部分 草案)可用于返回这样一对,从而充分代表 这些价值较高的人物。