javascript的键盘事件keydown, keyup, keypress的event对象中,keyCode != keyChar,网上有很多人提供了keyCode到keyChar的对照表。
于是,根据对照表,产生了如下工具函数,只需要把event对象作为参数传进去,就能够得到keyChar了,如果keyCode没有对应的字符,那返回的就是' '。
例子:
复制代码 代码示例:
window.keyChar = (function () {
var ssss = "";
var SSSS = "";
// M和m只是标尺, ssss和SSSS变量长度是为了对齐标尺
var M = "0 1 2 3 4 ";
var m = "01234567890123456789012345678901234567890123456789";
// 不带shift的码表
ssss += " 01";
ssss += "23456789 abcdefghijklmnopqrstuvwxyz 0123";
ssss += "456789*+ -./ ";
ssss += " ;=.-,/` ";
ssss += " [ ]' ";
// 带shift的码表
SSSS += " )!";
SSSS += "@#$%^&*( ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123";
SSSS += "456789*+ -./ ";
SSSS += " :+>_<?~ ";
SSSS += " {|} ";
// 将码表拆成字符数组
var t = ssss.split("");
var T = SSSS.split("");
// 将所有空格替换成空字符
var nullChar = String.fromCharCode(0);
for (var i = 0; i < t.length; i++) {
(t[i] === " ") && (t[i] = nullChar);
(T[i] === " ") && (T[i] = nullChar);
}
// 几个需要转义的字符,放在表里会影响排版,所以单独处理
t[9] = "t";
t[13] = "n";
t[32] = " ";
t[220] = "";
T[32] = " ";
T[222] = '"';
return function (event, isCheckShift) {
if (typeof isCheckShift === "undefined") { isCheckShift = true; }
if (!!isCheckShift && event.shiftKey) {
return T[event.keyCode];
} else {
return t[event.keyCode];
}
};
})();