2010-07-26 56 views
4

我很幸运能找到String.fromCharCode()。它对我有很大的帮助。但是,我注意到它没有考虑换档修改器。我知道event.shiftKey属性并使用它,但现在我需要获取考虑到shift键修饰符的键值(例如:“A”或“a”)。起初,我使用String.toLowerCase() ..但我忽略了想数字键,举一个例子:“5”(不带班次)和“%”(带班次)。我需要在我的程序中区分这两者。什么是获取关键字符值的简单方法?获取带有移位修饰符的键码的关键字符(值)

+0

什么问题的情况下。您是否试图查看在按键,按键,按键事件期间是否按下了Shift键。还是你正在评估一串字符,并想知道它是大写/小写还是数字/特殊字符? – 2010-07-26 17:23:07

+0

我知道如何检查按键事件期间是否按下了shift键。我所问的是,是否有办法让按键的字符被按下(一种考虑到shift键的方法) – Alan 2010-07-26 17:26:10

+0

目前还不清楚你想要什么。你想要输入的实际字符吗?被按下的实际物理键? – 2010-07-26 19:08:53

回答

6

这种蛮力技术不是最漂亮的,但它似乎工作。我在寻找相同的功能。

function mapKeyPressToActualCharacter(isShiftKey, characterCode) { 
    if (characterCode === 27 || characterCode === 8 || characterCode === 9 || characterCode === 20 || characterCode === 16 || characterCode === 17 || characterCode === 91 || characterCode === 13 || characterCode === 92 || characterCode === 18) { 
     return false; 
    } 
    if (typeof isShiftKey != "boolean" || typeof characterCode != "number") { 
     return false; 
    } 
    var characterMap = []; 
    characterMap[192] = "~"; 
    characterMap[49] = "!"; 
    characterMap[50] = "@"; 
    characterMap[51] = "#"; 
    characterMap[52] = "$"; 
    characterMap[53] = "%"; 
    characterMap[54] = "^"; 
    characterMap[55] = "&"; 
    characterMap[56] = "*"; 
    characterMap[57] = "("; 
    characterMap[48] = ")"; 
    characterMap[109] = "_"; 
    characterMap[107] = "+"; 
    characterMap[219] = "{"; 
    characterMap[221] = "}"; 
    characterMap[220] = "|"; 
    characterMap[59] = ":"; 
    characterMap[222] = "\""; 
    characterMap[188] = "<"; 
    characterMap[190] = ">"; 
    characterMap[191] = "?"; 
    characterMap[32] = " "; 
    var character = ""; 
    if (isShiftKey) { 
     if (characterCode >= 65 && characterCode <= 90) { 
      character = String.fromCharCode(characterCode); 
     } else { 
      character = characterMap[characterCode]; 
     } 
    } else { 
     if (characterCode >= 65 && characterCode <= 90) { 
      character = String.fromCharCode(characterCode).toLowerCase(); 
     } else { 
      character = String.fromCharCode(characterCode); 
     } 
    } 
    return character; 
} 
+0

是的。看起来不错。在尝试暴力方法之前,我想知道是否有可接受的解决方案。感谢您的回应。 – Alan 2011-02-28 01:59:03

+0

这是有效的,但确实令人不安的是没有标准接受的解决方案。 – 2013-02-18 01:37:39

+0

关于如何为非美式键盘布局创建此帐户的任何想法(例如,英国键盘上的Shift + 3是英镑符号)? – 2015-07-14 17:11:04

3

这一切都取决于您绑定的事件。在onkeypress事件期间,String.fromCharCode()将占用shiftKey。但是,在onkeydown活动期间不会关注它。

1

扩展在wsams响应,这里是一个更完整的解决方案,它需要更多的内存,但更高性能的

var characterMapShift = []; 
characterMapShift[8] = ""; 
characterMapShift[9] = ""; 
characterMapShift[13] = "\n"; 
characterMapShift[16] = ""; 
characterMapShift[17] = ""; 
characterMapShift[18] = ""; 
characterMapShift[19] = ""; 
characterMapShift[20] = ""; 
characterMapShift[27] = ""; 
characterMapShift[32] = " "; 
characterMapShift[33] = ""; 
characterMapShift[34] = ""; 
characterMapShift[35] = ""; 
characterMapShift[36] = ""; 
characterMapShift[37] = ""; 
characterMapShift[38] = ""; 
characterMapShift[39] = ""; 
characterMapShift[40] = ""; 
characterMapShift[45] = ""; 
characterMapShift[46] = ""; 
characterMapShift[48] = ")"; 
characterMapShift[49] = "!"; 
characterMapShift[50] = "@"; 
characterMapShift[51] = "#"; 
characterMapShift[52] = "$"; 
characterMapShift[53] = "%"; 
characterMapShift[54] = "^"; 
characterMapShift[55] = "&"; 
characterMapShift[56] = "*"; 
characterMapShift[57] = "("; 
characterMapShift[59] = ":"; 
characterMapShift[61] = "+"; 
characterMapShift[65] = "A"; 
characterMapShift[66] = "B"; 
characterMapShift[67] = "C"; 
characterMapShift[68] = "D"; 
characterMapShift[69] = "E"; 
characterMapShift[70] = "F"; 
characterMapShift[71] = "G"; 
characterMapShift[72] = "H"; 
characterMapShift[73] = "I"; 
characterMapShift[74] = "J"; 
characterMapShift[75] = "K"; 
characterMapShift[76] = "L"; 
characterMapShift[77] = "M"; 
characterMapShift[78] = "N"; 
characterMapShift[79] = "O"; 
characterMapShift[80] = "P"; 
characterMapShift[81] = "Q"; 
characterMapShift[82] = "R"; 
characterMapShift[83] = "S"; 
characterMapShift[84] = "T"; 
characterMapShift[85] = "U"; 
characterMapShift[86] = "V"; 
characterMapShift[87] = "W"; 
characterMapShift[88] = "X"; 
characterMapShift[89] = "Y"; 
characterMapShift[90] = "Z"; 
characterMapShift[91] = ""; 
characterMapShift[92] = ""; 
characterMapShift[93] = ""; 
characterMapShift[96] = "0"; 
characterMapShift[97] = "1"; 
characterMapShift[98] = "2"; 
characterMapShift[99] = "3"; 
characterMapShift[100] = "4"; 
characterMapShift[101] = "5"; 
characterMapShift[102] = "6"; 
characterMapShift[103] = "7"; 
characterMapShift[104] = "8"; 
characterMapShift[105] = "9"; 
characterMapShift[106] = "*"; 
characterMapShift[107] = "+"; 
characterMapShift[109] = "_"; 
characterMapShift[107] = "+"; 
characterMapShift[111] = "/"; 
characterMapShift[112] = ""; 
characterMapShift[113] = ""; 
characterMapShift[114] = ""; 
characterMapShift[115] = ""; 
characterMapShift[116] = ""; 
characterMapShift[117] = ""; 
characterMapShift[118] = ""; 
characterMapShift[119] = ""; 
characterMapShift[120] = ""; 
characterMapShift[121] = ""; 
characterMapShift[122] = ""; 
characterMapShift[123] = ""; 
characterMapShift[144] = ""; 
characterMapShift[145] = ""; 
characterMapShift[186] = ":"; 
characterMapShift[187] = "+"; 
characterMapShift[188] = "<"; 
characterMapShift[189] = "_"; 
characterMapShift[190] = ">"; 
characterMapShift[191] = "?"; 
characterMapShift[192] = "~"; 
characterMapShift[219] = "{"; 
characterMapShift[220] = "|"; 
characterMapShift[221] = "}"; 
characterMapShift[222] = "\""; 

var characterMap = []; 
characterMap[8] = ""; 
characterMap[9] = ""; 
characterMap[13] = "\n"; 
characterMap[16] = ""; 
characterMap[17] = ""; 
characterMap[18] = ""; 
characterMap[19] = ""; 
characterMap[20] = ""; 
characterMap[27] = ""; 
characterMap[32] = " "; 
characterMap[33] = ""; 
characterMap[34] = ""; 
characterMap[35] = ""; 
characterMap[36] = ""; 
characterMap[37] = ""; 
characterMap[38] = ""; 
characterMap[39] = ""; 
characterMap[40] = ""; 
characterMap[45] = ""; 
characterMap[46] = ""; 
characterMap[48] = "0"; 
characterMap[49] = "1"; 
characterMap[50] = "2"; 
characterMap[51] = "3"; 
characterMap[52] = "4"; 
characterMap[53] = "5"; 
characterMap[54] = "6"; 
characterMap[55] = "7"; 
characterMap[56] = "8"; 
characterMap[57] = "9"; 
characterMap[59] = ";"; 
characterMap[61] = "="; 
characterMap[65] = "a"; 
characterMap[66] = "b"; 
characterMap[67] = "c"; 
characterMap[68] = "d"; 
characterMap[69] = "e"; 
characterMap[70] = "f"; 
characterMap[71] = "g"; 
characterMap[72] = "h"; 
characterMap[73] = "i"; 
characterMap[74] = "j"; 
characterMap[75] = "k"; 
characterMap[76] = "l"; 
characterMap[77] = "m"; 
characterMap[78] = "n"; 
characterMap[79] = "o"; 
characterMap[80] = "p"; 
characterMap[81] = "q"; 
characterMap[82] = "r"; 
characterMap[83] = "s"; 
characterMap[84] = "t"; 
characterMap[85] = "u"; 
characterMap[86] = "v"; 
characterMap[87] = "w"; 
characterMap[88] = "x"; 
characterMap[89] = "y"; 
characterMap[90] = "z"; 
characterMap[91] = ""; 
characterMap[92] = ""; 
characterMap[93] = ""; 
characterMap[96] = "0"; 
characterMap[97] = "1"; 
characterMap[98] = "2"; 
characterMap[99] = "3"; 
characterMap[100] = "4"; 
characterMap[101] = "5"; 
characterMap[102] = "6"; 
characterMap[103] = "7"; 
characterMap[104] = "8"; 
characterMap[105] = "9"; 
characterMap[106] = "*"; 
characterMap[107] = "+"; 
characterMap[109] = "_"; 
characterMap[107] = "+"; 
characterMap[111] = "/"; 
characterMap[112] = ""; 
characterMap[113] = ""; 
characterMap[114] = ""; 
characterMap[115] = ""; 
characterMap[116] = ""; 
characterMap[117] = ""; 
characterMap[118] = ""; 
characterMap[119] = ""; 
characterMap[120] = ""; 
characterMap[121] = ""; 
characterMap[122] = ""; 
characterMap[123] = ""; 
characterMap[144] = ""; 
characterMap[145] = ""; 
characterMap[186] = ";"; 
characterMap[187] = "="; 
characterMap[188] = ","; 
characterMap[189] = "-"; 
characterMap[190] = "."; 
characterMap[191] = "/"; 
characterMap[192] = "`"; 
characterMap[219] = "["; 
characterMap[220] = "\\"; 
characterMap[221] = "]"; 
characterMap[222] = "'"; 

function mapKeyPressToActualCharacter(isShiftKey, characterCode) { 
    if (typeof isShiftKey != "boolean" || typeof characterCode != "number") { 
     return false; 
    } 

    if (isShiftKey) { 
     return characterMapShift[characterCode]; 
    } else { 
     return characterMap[characterCode]; 
    } 
}