我很幸运能找到String.fromCharCode()
。它对我有很大的帮助。但是,我注意到它没有考虑换档修改器。我知道event.shiftKey
属性并使用它,但现在我需要获取考虑到shift键修饰符的键值(例如:“A”或“a”)。起初,我使用String.toLowerCase()
..但我忽略了想数字键,举一个例子:“5”(不带班次)和“%”(带班次)。我需要在我的程序中区分这两者。什么是获取关键字符值的简单方法?获取带有移位修饰符的键码的关键字符(值)
回答
这种蛮力技术不是最漂亮的,但它似乎工作。我在寻找相同的功能。
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;
}
是的。看起来不错。在尝试暴力方法之前,我想知道是否有可接受的解决方案。感谢您的回应。 – Alan 2011-02-28 01:59:03
这是有效的,但确实令人不安的是没有标准接受的解决方案。 – 2013-02-18 01:37:39
关于如何为非美式键盘布局创建此帐户的任何想法(例如,英国键盘上的Shift + 3是英镑符号)? – 2015-07-14 17:11:04
这一切都取决于您绑定的事件。在onkeypress
事件期间,String.fromCharCode()
将占用shiftKey
。但是,在onkeydown
活动期间不会关注它。
扩展在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];
}
}
- 1. InputEvent修饰符键
- 2. “Windows”键的InputGesture修饰符
- 3. C#(VS2008)抑制修改键的键码,但保留修饰符
- 4. Gtk按键修饰符
- 5. Java中的修饰符关键字顺序
- 6. MouseBinding上的WPF键盘修饰符
- 7. 如何发布仅包含键盘字符(无修饰符)的SWT键事件?
- 8. 修饰器,添加关键字参数
- 9. 带修饰键的JavaScript键盘快捷键?
- 10. 带有多个修饰符的JavaScript RegExp
- 11. 获取带值的JSON键
- 12. pygtk:确定键是修饰符
- 13. .Net TCP/IP使用Ctrl键修饰符发送字符
- 14. 如何获取字符键的唯一键码
- 15. 使用IOHIDManager获取修饰键事件
- 16. JSON:字符集和获取键/值
- 17. DataGridView中有或没有数据的按键修饰符
- 18. 用autohotkey中的键发送现有的修饰符?
- 19. preventDefault没有阻止使用Alt修饰符的键
- 20. Swift:获取字符串中的所有键值对
- 21. 如何读取有问题修饰符的字符串?
- 22. 从xml字符串获取关键值2维
- 23. 捕获特定的修饰键
- 24. 关键字读取字符串
- 25. NSPredicate用于获取字符串中的关键字
- 26. 如何用修饰符键状态成功地散列System.Windows.Input.Key值?
- 27. 在lucene中搜索带有符号的关键字
- 28. 从带引号的字符串中提取键值对
- 29. 使用带有“null”关键字的“is”关键字c#7.0
- 30. 查找从关键字到关键字的字符串部分
什么问题的情况下。您是否试图查看在按键,按键,按键事件期间是否按下了Shift键。还是你正在评估一串字符,并想知道它是大写/小写还是数字/特殊字符? – 2010-07-26 17:23:07
我知道如何检查按键事件期间是否按下了shift键。我所问的是,是否有办法让按键的字符被按下(一种考虑到shift键的方法) – Alan 2010-07-26 17:26:10
目前还不清楚你想要什么。你想要输入的实际字符吗?被按下的实际物理键? – 2010-07-26 19:08:53