Javascript的键盘事件keydown, keyup的event对象中(注意keypress的event对象的keyCode已经转过码了),keyCode != keyChar,网上有很多人提供了keyCode到keyChar的对照表。于是,根据对照表,产生了如下工具函数,只需要把event对象作为参数传进去,就能够得到keyChar了,如果keyCode没有对应的字符,那返回的就是'\0'。
- 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];
- }
- };
- })();
本文转自边城__ 51CTO博客,原文链接:http://blog.51cto.com/jamesfancy/667869,如需转载请自行联系原作者