나는 String.fromCharCode()
이라는 행운을 찾았습니다. 그것은 크게 도움이되었습니다. 그러나, 나는 그것이 교대 변경자를 고려하지 않는다는 것을 알아 차렸다. 나는 event.shiftKey
속성을 알고 그것을 사용하지만, 지금은 Shift 키 수정자를 고려한 키 값 (예 : "A"또는 "a")을 가져와야합니다. 처음에는 String.toLowerCase()
을 사용했습니다. 그러나 숫자 키를 생각하지 않고 "5"(시프트 없음) 및 "%"(시프트 포함) 한 예를 들었습니다. 내 프로그램에서이 둘을 구별해야합니다. 키 값을 얻는 가장 쉬운 방법은 무엇입니까?시프트 수정 자로 키 코드에서 키 char (값) 가져 오기
답변
이 무차별 기술은 가장 좋지 않지만 작동하는 것처럼 보입니다. 나는 동일한 기능을 찾고있다.
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;
}
예. 좋아 보인다. brute force 메서드를 시도하기 전에 허용 된 솔루션이 있는지 알아야했습니다. 응답 해 주셔서 감사합니다. – Alan
이 방법이 효과적이지만 실제로 표준화 된 해결책이 없다는 사실에 화를 냈습니다. –
미국 이외 지역의 키보드 레이아웃을 위해이 계정을 만드는 방법에 대해 생각해보십시오 (예 : 영국 키보드의 'Shift + 3'은 파운드 기호)? –
모든 것은 바인딩 할 이벤트에 따라 다릅니다. String.fromCharCode()
은 onkeypress
이벤트 중에 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. 레지스트리 키 값 가져 오기
- 2. 키/값 쌍의 목록 값 가져 오기
- 3. CGEvent 탭에서 수정 자 키 가져 오기
- 4. ArrayListMultimap 키 가져 오기
- 5. 사전에서 위치별로 키 - 값 가져 오기
- 6. 키 문자열로 배열 값 가져 오기
- 7. PHP에서 XML 키 및 값 가져 오기
- 8. 외래 키 가져 오기
- 9. 사전 개체에서 키 가져 오기?
- 10. 키 코드에서 키 구문 분석하기
- 11. 수정 키 상태
- 12. 키 체인에 distrib_identity.cer 가져 오기
- 13. 키 가져 오기 ActionScript3 배열
- 14. ActionScript 사전에서 키 가져 오기
- 15. Android에서 볼륨 키 가져 오기
- 16. mySQL 가져 오기/중복 키
- 17. IOHIDManager를 사용하여 수정 자 키 이벤트 가져 오기
- 18. 자바 키 코드 =/char 코드
- 19. PHP에서 인수에 배열 키 가져 오기
- 20. 해시 반전, 키 가져 오기 및 정렬
- 21. 루프 + XSLT에서 키 열 가져 오기
- 22. iOS 앱 소비 키 값 가져 오기 JSON
- 23. jQuery : keydown에 함수 호출하지만 키 업에 값 가져 오기
- 24. 메소드 인수를 키 및 값 쌍 목록으로 가져 오기
- 25. Java App Engine 자동 생성 된 키 값 가져 오기
- 26. 시프트 키 (수정 자 키)를 uitextview에서 누를 경우 알림을 감지/가져옵니다.
- 27. 다차원 배열의 현재 배열 키 가져 오기
- 28. javascript : 키 값 끝내기?
- 29. 코드에서 androidManifest의 "디버그 가능"값 가져 오기?
- 30. 하는 방법에 키 값
더 성능이 좋은입니다보다 완벽한 솔루션입니다. keypress, keyup, keydown 이벤트 중에 ShiftKey가 눌 렸는지 확인하려고합니까? 아니면 문자의 문자열을 평가하고 그것을 대문자 또는 숫자/특수 문자인지 알고 싶습니까? –
키 이벤트 중에 Shift 키가 눌러 졌는지 확인하는 방법을 알고 있습니다. 내가 묻는 것은 키를 눌렀을 때의 문자를 얻는 방법이 있다면 (시프트 키를 고려한 방법) – Alan
당신이 원하는 것이 분명하지 않다. 타이핑 된 실제 캐릭터를 원하십니까? 누를 실제 물리적 키? –