Любой возможный способ преобразования event.keyCode в char? [Дубликат]

Запустите команду для входа в БД

 # mysql -u root -p 

Введите пароль для пользователя. Затем создайте новую БД

mysql> create database MynewDB;
mysql> exit

И сделайте exit.Afetr that.Run эта команда

# mysql -u root -p  MynewDB < MynewDB.sql

Затем введите в db и введите

mysql> show databases;
mysql> use MynewDB;
mysql> show tables;
mysql> exit

Thats it ........ Ваш дамп будет восстановлен из одной базы данных в другую БД

Или существует альтернативный способ восстановления дампа

# mysql -u root -p 

Затем введите в db и введите

mysql> create database MynewDB;
mysql> show databases;
mysql> use MynewDB;
mysql> source MynewDB.sql;
mysql> show tables;
mysql> exit
132
задан Kevin Guan 19 May 2016 в 23:33
поделиться

9 ответов

Возможно, я не понял вопрос правильно, но не можете ли вы использовать keyup, если хотите захватить оба входа?

$("input").bind("keyup",function(e){
    var value = this.value + String.fromCharCode(e.keyCode);
});
149
ответ дан falgranado 20 August 2018 в 22:18
поделиться
  • 1
    Это не работает с другими локалями, которые находятся вне диапазона ASCII (например, латинский-1, например, немецкий, французский, итальянский и испанский, если вы знаете). Очевидно, также не выполняется для непечатаемых ключей. – Florian Bösch 29 January 2013 в 14:41
  • 2
    Это также не удается при использовании чисел на цифровой клавиатуре, e.keyCode не является кодом ASCII (или даже UTF-x). – Tom Chiverton 6 January 2014 в 11:38
  • 3
    Плохой ответ, он даже не работает с основными персонажами. Например, код с запятой, например, равен 186, запустите на нем String.fromCharCode (), и вы получите мусор. Проблема в том, что keyCode не соответствует ASCII для всех символов. Символ ASCII для точки с запятой - 59. Такая же проблема относится ко всем специальным символам, keyCode НЕ возвращает правильный код для String.fromCharCode (). – Alexander Tsepkov 4 February 2017 в 10:06

Недавно я написал модуль под названием keysight , который переводит события keypress, keydown и keyup в символы и клавиши соответственно.

Пример:

 element.addEventListener("keydown", function(event) {
    var character = keysight(event).char
 })
0
ответ дан B T 20 August 2018 в 22:18
поделиться
  • 1
    поддерживает ли он такие ключи, как? – Arnold Roa 30 September 2016 в 17:05
  • 2
    @ArnoldRoa Я просто подтолкнул что-то, что, надеюсь, будет поддерживать таких персонажей. У меня нет клавиатуры с акцентированными персонажами, так что вы не возражаете против тестирования? – B T 1 October 2016 в 01:46

В ответ на эту проблему я просто написал плагин jQuery: https://github.com/bpeacock/key-to-charCode/

Немного вниз и грязный и может быть лучше интегрирован в jQuery, но это начало.

2
ответ дан Brian Peacock 20 August 2018 в 22:18
поделиться

Имена читаемых ключей, индексированные по коду ключа

Существует относительно мало ключевых кодов, поэтому я просто перечислял все соответствующие значения в статическом массиве, поэтому я мог просто преобразовать число 65 в A, используя keyboardMap[65]

Не все коды клавиш отображаются на печатный символ, поэтому возвращается другая идентифицирующая строка.

Возможно, вам потребуется изменить массив в соответствии с вашими потребностями и просто вернуть пустой строки для всех персонажей, которые вы не хотите переводить. Следующий массив позволяет мне быстро и надежно определять, какой ключ был нажат в любой среде. Наслаждайтесь!

// names of known key codes (0-255)

var keyboardMap = [
  "", // [0]
  "", // [1]
  "", // [2]
  "CANCEL", // [3]
  "", // [4]
  "", // [5]
  "HELP", // [6]
  "", // [7]
  "BACK_SPACE", // [8]
  "TAB", // [9]
  "", // [10]
  "", // [11]
  "CLEAR", // [12]
  "ENTER", // [13]
  "ENTER_SPECIAL", // [14]
  "", // [15]
  "SHIFT", // [16]
  "CONTROL", // [17]
  "ALT", // [18]
  "PAUSE", // [19]
  "CAPS_LOCK", // [20]
  "KANA", // [21]
  "EISU", // [22]
  "JUNJA", // [23]
  "FINAL", // [24]
  "HANJA", // [25]
  "", // [26]
  "ESCAPE", // [27]
  "CONVERT", // [28]
  "NONCONVERT", // [29]
  "ACCEPT", // [30]
  "MODECHANGE", // [31]
  "SPACE", // [32]
  "PAGE_UP", // [33]
  "PAGE_DOWN", // [34]
  "END", // [35]
  "HOME", // [36]
  "LEFT", // [37]
  "UP", // [38]
  "RIGHT", // [39]
  "DOWN", // [40]
  "SELECT", // [41]
  "PRINT", // [42]
  "EXECUTE", // [43]
  "PRINTSCREEN", // [44]
  "INSERT", // [45]
  "DELETE", // [46]
  "", // [47]
  "0", // [48]
  "1", // [49]
  "2", // [50]
  "3", // [51]
  "4", // [52]
  "5", // [53]
  "6", // [54]
  "7", // [55]
  "8", // [56]
  "9", // [57]
  "COLON", // [58]
  "SEMICOLON", // [59]
  "LESS_THAN", // [60]
  "EQUALS", // [61]
  "GREATER_THAN", // [62]
  "QUESTION_MARK", // [63]
  "AT", // [64]
  "A", // [65]
  "B", // [66]
  "C", // [67]
  "D", // [68]
  "E", // [69]
  "F", // [70]
  "G", // [71]
  "H", // [72]
  "I", // [73]
  "J", // [74]
  "K", // [75]
  "L", // [76]
  "M", // [77]
  "N", // [78]
  "O", // [79]
  "P", // [80]
  "Q", // [81]
  "R", // [82]
  "S", // [83]
  "T", // [84]
  "U", // [85]
  "V", // [86]
  "W", // [87]
  "X", // [88]
  "Y", // [89]
  "Z", // [90]
  "OS_KEY", // [91] Windows Key (Windows) or Command Key (Mac)
  "", // [92]
  "CONTEXT_MENU", // [93]
  "", // [94]
  "SLEEP", // [95]
  "NUMPAD0", // [96]
  "NUMPAD1", // [97]
  "NUMPAD2", // [98]
  "NUMPAD3", // [99]
  "NUMPAD4", // [100]
  "NUMPAD5", // [101]
  "NUMPAD6", // [102]
  "NUMPAD7", // [103]
  "NUMPAD8", // [104]
  "NUMPAD9", // [105]
  "MULTIPLY", // [106]
  "ADD", // [107]
  "SEPARATOR", // [108]
  "SUBTRACT", // [109]
  "DECIMAL", // [110]
  "DIVIDE", // [111]
  "F1", // [112]
  "F2", // [113]
  "F3", // [114]
  "F4", // [115]
  "F5", // [116]
  "F6", // [117]
  "F7", // [118]
  "F8", // [119]
  "F9", // [120]
  "F10", // [121]
  "F11", // [122]
  "F12", // [123]
  "F13", // [124]
  "F14", // [125]
  "F15", // [126]
  "F16", // [127]
  "F17", // [128]
  "F18", // [129]
  "F19", // [130]
  "F20", // [131]
  "F21", // [132]
  "F22", // [133]
  "F23", // [134]
  "F24", // [135]
  "", // [136]
  "", // [137]
  "", // [138]
  "", // [139]
  "", // [140]
  "", // [141]
  "", // [142]
  "", // [143]
  "NUM_LOCK", // [144]
  "SCROLL_LOCK", // [145]
  "WIN_OEM_FJ_JISHO", // [146]
  "WIN_OEM_FJ_MASSHOU", // [147]
  "WIN_OEM_FJ_TOUROKU", // [148]
  "WIN_OEM_FJ_LOYA", // [149]
  "WIN_OEM_FJ_ROYA", // [150]
  "", // [151]
  "", // [152]
  "", // [153]
  "", // [154]
  "", // [155]
  "", // [156]
  "", // [157]
  "", // [158]
  "", // [159]
  "CIRCUMFLEX", // [160]
  "EXCLAMATION", // [161]
  "DOUBLE_QUOTE", // [162]
  "HASH", // [163]
  "DOLLAR", // [164]
  "PERCENT", // [165]
  "AMPERSAND", // [166]
  "UNDERSCORE", // [167]
  "OPEN_PAREN", // [168]
  "CLOSE_PAREN", // [169]
  "ASTERISK", // [170]
  "PLUS", // [171]
  "PIPE", // [172]
  "HYPHEN_MINUS", // [173]
  "OPEN_CURLY_BRACKET", // [174]
  "CLOSE_CURLY_BRACKET", // [175]
  "TILDE", // [176]
  "", // [177]
  "", // [178]
  "", // [179]
  "", // [180]
  "VOLUME_MUTE", // [181]
  "VOLUME_DOWN", // [182]
  "VOLUME_UP", // [183]
  "", // [184]
  "", // [185]
  "SEMICOLON", // [186]
  "EQUALS", // [187]
  "COMMA", // [188]
  "MINUS", // [189]
  "PERIOD", // [190]
  "SLASH", // [191]
  "BACK_QUOTE", // [192]
  "", // [193]
  "", // [194]
  "", // [195]
  "", // [196]
  "", // [197]
  "", // [198]
  "", // [199]
  "", // [200]
  "", // [201]
  "", // [202]
  "", // [203]
  "", // [204]
  "", // [205]
  "", // [206]
  "", // [207]
  "", // [208]
  "", // [209]
  "", // [210]
  "", // [211]
  "", // [212]
  "", // [213]
  "", // [214]
  "", // [215]
  "", // [216]
  "", // [217]
  "", // [218]
  "OPEN_BRACKET", // [219]
  "BACK_SLASH", // [220]
  "CLOSE_BRACKET", // [221]
  "QUOTE", // [222]
  "", // [223]
  "META", // [224]
  "ALTGR", // [225]
  "", // [226]
  "WIN_ICO_HELP", // [227]
  "WIN_ICO_00", // [228]
  "", // [229]
  "WIN_ICO_CLEAR", // [230]
  "", // [231]
  "", // [232]
  "WIN_OEM_RESET", // [233]
  "WIN_OEM_JUMP", // [234]
  "WIN_OEM_PA1", // [235]
  "WIN_OEM_PA2", // [236]
  "WIN_OEM_PA3", // [237]
  "WIN_OEM_WSCTRL", // [238]
  "WIN_OEM_CUSEL", // [239]
  "WIN_OEM_ATTN", // [240]
  "WIN_OEM_FINISH", // [241]
  "WIN_OEM_COPY", // [242]
  "WIN_OEM_AUTO", // [243]
  "WIN_OEM_ENLW", // [244]
  "WIN_OEM_BACKTAB", // [245]
  "ATTN", // [246]
  "CRSEL", // [247]
  "EXSEL", // [248]
  "EREOF", // [249]
  "PLAY", // [250]
  "ZOOM", // [251]
  "", // [252]
  "PA1", // [253]
  "WIN_OEM_CLEAR", // [254]
  "" // [255]
];

Примечание: Важное значение позиции каждого значения в массиве выше. "" являются заполнителями для кодов с неизвестными значениями.

Попробуйте следующий фрагмент кода, используя этот подход поиска статического массива ...

var keyCodes = [];

$("#reset").click(function() {
  keyCodes = [];
  $("#in").val("");
  $("#key-codes").html("var keyCodes = [ ];");
  $("#key-names").html("var keyNames = [ ];");
});

$(document).keydown(function(e) {
  keyCodes.push(e.which);
  updateOutput();
});

function updateOutput() {
  var kC = "var keyCodes = [ ";
  var kN = "var keyNames = [ ";

  var len = keyCodes.length;

  for (var i = 0; i < len; i++) {
    kC += keyCodes[i];
    kN += "'"+keyboardMap[keyCodes[i]]+"'";
    if (i !== (len - 1)) {
      kC += ", ";
      kN += ", ";
    }
  }

  kC += " ];";
  kN += " ];";

  $("#key-codes").html(kC);
  $("#key-names").html(kN);
}



var keyboardMap = [
  "", // [0]
  "", // [1]
  "", // [2]
  "CANCEL", // [3]
  "", // [4]
  "", // [5]
  "HELP", // [6]
  "", // [7]
  "BACK_SPACE", // [8]
  "TAB", // [9]
  "", // [10]
  "", // [11]
  "CLEAR", // [12]
  "ENTER", // [13]
  "ENTER_SPECIAL", // [14]
  "", // [15]
  "SHIFT", // [16]
  "CONTROL", // [17]
  "ALT", // [18]
  "PAUSE", // [19]
  "CAPS_LOCK", // [20]
  "KANA", // [21]
  "EISU", // [22]
  "JUNJA", // [23]
  "FINAL", // [24]
  "HANJA", // [25]
  "", // [26]
  "ESCAPE", // [27]
  "CONVERT", // [28]
  "NONCONVERT", // [29]
  "ACCEPT", // [30]
  "MODECHANGE", // [31]
  "SPACE", // [32]
  "PAGE_UP", // [33]
  "PAGE_DOWN", // [34]
  "END", // [35]
  "HOME", // [36]
  "LEFT", // [37]
  "UP", // [38]
  "RIGHT", // [39]
  "DOWN", // [40]
  "SELECT", // [41]
  "PRINT", // [42]
  "EXECUTE", // [43]
  "PRINTSCREEN", // [44]
  "INSERT", // [45]
  "DELETE", // [46]
  "", // [47]
  "0", // [48]
  "1", // [49]
  "2", // [50]
  "3", // [51]
  "4", // [52]
  "5", // [53]
  "6", // [54]
  "7", // [55]
  "8", // [56]
  "9", // [57]
  "COLON", // [58]
  "SEMICOLON", // [59]
  "LESS_THAN", // [60]
  "EQUALS", // [61]
  "GREATER_THAN", // [62]
  "QUESTION_MARK", // [63]
  "AT", // [64]
  "A", // [65]
  "B", // [66]
  "C", // [67]
  "D", // [68]
  "E", // [69]
  "F", // [70]
  "G", // [71]
  "H", // [72]
  "I", // [73]
  "J", // [74]
  "K", // [75]
  "L", // [76]
  "M", // [77]
  "N", // [78]
  "O", // [79]
  "P", // [80]
  "Q", // [81]
  "R", // [82]
  "S", // [83]
  "T", // [84]
  "U", // [85]
  "V", // [86]
  "W", // [87]
  "X", // [88]
  "Y", // [89]
  "Z", // [90]
  "OS_KEY", // [91] Windows Key (Windows) or Command Key (Mac)
  "", // [92]
  "CONTEXT_MENU", // [93]
  "", // [94]
  "SLEEP", // [95]
  "NUMPAD0", // [96]
  "NUMPAD1", // [97]
  "NUMPAD2", // [98]
  "NUMPAD3", // [99]
  "NUMPAD4", // [100]
  "NUMPAD5", // [101]
  "NUMPAD6", // [102]
  "NUMPAD7", // [103]
  "NUMPAD8", // [104]
  "NUMPAD9", // [105]
  "MULTIPLY", // [106]
  "ADD", // [107]
  "SEPARATOR", // [108]
  "SUBTRACT", // [109]
  "DECIMAL", // [110]
  "DIVIDE", // [111]
  "F1", // [112]
  "F2", // [113]
  "F3", // [114]
  "F4", // [115]
  "F5", // [116]
  "F6", // [117]
  "F7", // [118]
  "F8", // [119]
  "F9", // [120]
  "F10", // [121]
  "F11", // [122]
  "F12", // [123]
  "F13", // [124]
  "F14", // [125]
  "F15", // [126]
  "F16", // [127]
  "F17", // [128]
  "F18", // [129]
  "F19", // [130]
  "F20", // [131]
  "F21", // [132]
  "F22", // [133]
  "F23", // [134]
  "F24", // [135]
  "", // [136]
  "", // [137]
  "", // [138]
  "", // [139]
  "", // [140]
  "", // [141]
  "", // [142]
  "", // [143]
  "NUM_LOCK", // [144]
  "SCROLL_LOCK", // [145]
  "WIN_OEM_FJ_JISHO", // [146]
  "WIN_OEM_FJ_MASSHOU", // [147]
  "WIN_OEM_FJ_TOUROKU", // [148]
  "WIN_OEM_FJ_LOYA", // [149]
  "WIN_OEM_FJ_ROYA", // [150]
  "", // [151]
  "", // [152]
  "", // [153]
  "", // [154]
  "", // [155]
  "", // [156]
  "", // [157]
  "", // [158]
  "", // [159]
  "CIRCUMFLEX", // [160]
  "EXCLAMATION", // [161]
  "DOUBLE_QUOTE", // [162]
  "HASH", // [163]
  "DOLLAR", // [164]
  "PERCENT", // [165]
  "AMPERSAND", // [166]
  "UNDERSCORE", // [167]
  "OPEN_PAREN", // [168]
  "CLOSE_PAREN", // [169]
  "ASTERISK", // [170]
  "PLUS", // [171]
  "PIPE", // [172]
  "HYPHEN_MINUS", // [173]
  "OPEN_CURLY_BRACKET", // [174]
  "CLOSE_CURLY_BRACKET", // [175]
  "TILDE", // [176]
  "", // [177]
  "", // [178]
  "", // [179]
  "", // [180]
  "VOLUME_MUTE", // [181]
  "VOLUME_DOWN", // [182]
  "VOLUME_UP", // [183]
  "", // [184]
  "", // [185]
  "SEMICOLON", // [186]
  "EQUALS", // [187]
  "COMMA", // [188]
  "MINUS", // [189]
  "PERIOD", // [190]
  "SLASH", // [191]
  "BACK_QUOTE", // [192]
  "", // [193]
  "", // [194]
  "", // [195]
  "", // [196]
  "", // [197]
  "", // [198]
  "", // [199]
  "", // [200]
  "", // [201]
  "", // [202]
  "", // [203]
  "", // [204]
  "", // [205]
  "", // [206]
  "", // [207]
  "", // [208]
  "", // [209]
  "", // [210]
  "", // [211]
  "", // [212]
  "", // [213]
  "", // [214]
  "", // [215]
  "", // [216]
  "", // [217]
  "", // [218]
  "OPEN_BRACKET", // [219]
  "BACK_SLASH", // [220]
  "CLOSE_BRACKET", // [221]
  "QUOTE", // [222]
  "", // [223]
  "META", // [224]
  "ALTGR", // [225]
  "", // [226]
  "WIN_ICO_HELP", // [227]
  "WIN_ICO_00", // [228]
  "", // [229]
  "WIN_ICO_CLEAR", // [230]
  "", // [231]
  "", // [232]
  "WIN_OEM_RESET", // [233]
  "WIN_OEM_JUMP", // [234]
  "WIN_OEM_PA1", // [235]
  "WIN_OEM_PA2", // [236]
  "WIN_OEM_PA3", // [237]
  "WIN_OEM_WSCTRL", // [238]
  "WIN_OEM_CUSEL", // [239]
  "WIN_OEM_ATTN", // [240]
  "WIN_OEM_FINISH", // [241]
  "WIN_OEM_COPY", // [242]
  "WIN_OEM_AUTO", // [243]
  "WIN_OEM_ENLW", // [244]
  "WIN_OEM_BACKTAB", // [245]
  "ATTN", // [246]
  "CRSEL", // [247]
  "EXSEL", // [248]
  "EREOF", // [249]
  "PLAY", // [250]
  "ZOOM", // [251]
  "", // [252]
  "PA1", // [253]
  "WIN_OEM_CLEAR", // [254]
  "" // [255]
];
#key-codes,
#key-names {
  font-family: courier, serif;
  font-size: 1.2em;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input id="in" placeholder="Type here..." />
<button id="reset">Reset</button>
<br/>
<br/>
<div id="key-codes">var keyCodes = [ ];</div>
<div id="key-names">var keyNames = [ ];</div>


Коды, на которые стоит обратить внимание

Буквы AZ: (65-90)

keyboardMap[65];  // A
...
keyboardMap[90];  // Z

Цифры 0-9: (48-57)

keyboardMap[48];  // 0
...
keyboardMap[57];  // 9

Number Pad 0-9: (96-105)

keyboardMap[96];   // NUMPAD0
...
keyboardMap[105];  // NUMPAD9

Клавиши со стрелками: (37-40)

keyboardMap[37];  // LEFT
keyboardMap[38];  // UP
keyboardMap[39];  // RIGHT
keyboardMap[40];  // DOWN

Клавиша вкладок: (9)

keyboardMap[9];  // TAB

Введите ключ: (13)

keyboardMap[13];  // ENTER

Клавиша пробела: (32)

keyboardMap[32];  // SPACE

Специфический ключ ОС (91) Ключ Windows (Windows) или Command Key (Mac)

keyboardMap[91];  // OS_KEY

Клавиша Alt: (18)

keyboardMap[18];  // ALT

Клавиша управления: (17)

keyboardMap[17];  // CONTROL

Клавиша переключения: (16)

keyboardMap[16];  // SHIFT

Кнопка блокировки крышки: (20)

keyboardMap[20];  // CAPS_LOCK
70
ответ дан DaveAlger 20 August 2018 в 22:18
поделиться
  • 1
    не работает для специальных символов, если ввести ключи со сменой клавиш, любое решение? – Shaik Matheen 8 May 2017 в 13:23

Я знаю, что это старый вопрос, но сегодня я столкнулся с этим поиском предварительно упакованного решения этой проблемы и не нашел ничего, что действительно соответствовало моим потребностям.

Вот решение (только на английском языке), которое правильно поддерживает верхний регистр (сдвинутый), нижний регистр, пунктуацию, цифровую клавиатуру и т. д.

Это также позволяет просто и прямолинейно идентификация - и реакция на - непечатаемые ключи, такие как ESC, стрелки, функциональные клавиши и т. д.

https://jsfiddle.net/5hhu896g/1/

keyboardCharMap and keyboardNameMap are the key to making this work

Спасибо DaveAlger за то, что вы меня немного набрали - и много открытий! - путем предоставления массива с именованным ключом.

0
ответ дан halfer 20 August 2018 в 22:18
поделиться
  • 1
    Ваша скрипка - самое превосходное! Спасибо, что поделился. Он отлично работает. Я использую его для реализации редактирования нескольких курсоров в стиле Sublime для полей формы с элементами, имеющими те же значения – Todd Hammer 23 June 2018 в 15:20

По моему опыту String.fromCharCode(e.keyCode) ненадежна. String.fromCharCode ожидает кодировки unicode в качестве аргумента; e.keyCode возвращает коды кода javascript. Коды javascript и кодовые обозначения юникода - это , а не то же самое! В частности, клавиши номерной панели возвращают разные keycode из обычных цифровых клавиш (поскольку они являются разными клавишами), в то время как тот же keycode возвращается как для букв upper, так и lowercase (вы нажали ту же клавишу в обоих случаев), несмотря на то, что они имеют разные charcodes.

Например, обычная цифровая клавиша 1 генерирует событие с keycode 49, в то время как клавиша 1 цифровой клавиатуры (с включенным Numlock) генерирует keycode 97. Используется с String.fromCharCode, мы получаем следующее:

String.fromCharCode(49) returns "1"
String.fromCharCode(97) returns "a"

String.fromCharCode ожидает кодировки Unicode, а не коды javascript. Ключ a генерирует событие с keycode из 65, независимым от случая символа, который он сгенерировал (есть также модификатор, если нажата клавиша Shift и т. Д.). Символ a имеет юникод charcode 61, тогда как символ A имеет charcode из 41 (согласно, например, http://www.utf8-chartable.de/ ). Тем не менее, это hex значения, преобразование в десятичную дает нам charcode из 65 для «A» и 97 для «a». [1] Это согласуется с тем, что мы получаем из String.fromCharCode для этих значений.

Мое собственное требование было ограничено обработкой чисел и обычными буквами (принятие или отклонение в зависимости от позиции в строке) и разрешение управляющих символов ( F-ключи, Ctrl-что-то). Таким образом, я могу проверить управляющие символы, если это не контрольный символ, который я проверяю на диапазон, и только тогда мне нужно получить фактический символ. Учитывая, что меня не беспокоит случай (я все равно меняю буквы на прописные буквы) и уже ограничил диапазон кодов клавиш, мне нужно только беспокоиться о клавишах с цифровой клавиатурой. Для этого достаточно:

String.fromCharCode((96 <= key && key <= 105)? key-48 : key)

В общем случае функция надежного возврата символа из charcode была бы большой (возможно, как плагин jQuery), но у меня нет времени напишите это сейчас. Извините.

Я также упомянул e.which (если вы используете jQuery), который нормализует e.keyCode и e.charCode, так что вам не нужно беспокоиться о том, какой ключ был нажат. Проблема с объединением его с String.fromCharCode остается.

[1] Некоторое время я был смущен. все документы говорят, что String.fromCharCode ожидает unicode charcode, в то время как на практике он, похоже, работает для ASCII-кодировок, но я думаю, из-за необходимости конвертировать в десятичный код из шестнадцатеричного кода в сочетании с тем, что ASCII-символы и unicode decimal charcodes перекрываются для обычных латинских букв.

175
ответ дан Jonatas Walker 20 August 2018 в 22:18
поделиться
  • 1
    Этот комментарий почти полностью обошел все мои проблемы. Удивительно, что jQuery не реализовал «из KeyCode», эквивалент javascript's "String.fromCharCode" – Chris J 6 June 2012 в 23:52
  • 2
    Кажется, что событие KeyPress делает это. См. stackoverflow.com/a/9350415/209568 . Из документов jQuery & quot; Обратите внимание, что keydown и keyup предоставляют код, указывающий, какая клавиша нажата, а нажатие клавиши указывает, какой символ был введен. Например, нижний регистр "a" будет сообщено как 65 путем keydown и keyup, но как 97 нажатием клавиши. Верхний регистр "A" сообщается как 65 по всем событиям. Из-за этого различия, при выборе особых нажатий клавиш, таких как клавиши со стрелками, .keydown () или .keyup (), является лучшим выбором. & Quot; – Adam 28 June 2012 в 13:37
  • 3
    Это наиболее неприятно для тех из нас, кто пристрастился к keydown. – Isaac Bolinger 25 January 2015 в 18:53
  • 4
    Замечание об этом последнем бит об ASCII и Unicode. Unicode имеет все 128 символов ASCII в одном и том же месте. Это было намеренно, так что любой файл, первоначально закодированный как ASCII, может маскироваться как (и быть преобразованным в) Unicode без каких-либо работ. Расширенные символы ASCII не находятся в одном и том же месте, поэтому, если вы использовали эти символы, вам не повезло. – DanielM 16 April 2015 в 19:28
  • 5
    Точка keyCode заключается в том, чтобы знать, какой ключ был нажат, чтобы не знать, какой символ использовать. Например, "U" на клавиатуре Dvorak имеет тот же код ключа, что и «F». на клавиатуре QWERTY или "ㄹ" на корейской клавиатуре и т. д. Дело не в том, чтобы превратить его в персонажа, он там, чтобы вы могли легко сопоставить вещи с позицией клавиатуры. – Vincent McNabb 19 January 2018 в 20:44

Просто важное примечание: принятый ответ выше не будет корректно работать для keyCode> = 144, то есть периода, запятой, тире и т. д. Для них вы должны использовать более общий алгоритм:

let chrCode = keyCode - 48 * Math.floor(keyCode / 48);
let chr = String.fromCharCode((96 <= keyCode) ? chrCode: keyCode);

Если вам интересно, почему это, по-видимому, необходимо из-за поведения встроенной функции JS String.fromCharCode(). Для значений keyCode <= 96 он, по-видимому, отображается с помощью функции:

chrCode = keyCode - 48 * Math.floor(keyCode / 48)

Для значений keyCode > 96, как представляется, карта использует функцию:

chrCode = keyCode

Если это похоже на нечетное поведение, тогда хорошо ... Я согласен. К сожалению, это было бы очень далеко от самой странной вещи, которую я видел в ядре JS.

document.onkeydown = function(e) {
    let keyCode = e.keyCode;
    let chrCode = keyCode - 48 * Math.floor(keyCode / 48);
    let chr = String.fromCharCode((96 <= keyCode) ? chrCode: keyCode);
    console.log(chr);
};
<input type="text" placeholder="Focus and Type"/>

12
ответ дан KyleMit 20 August 2018 в 22:18
поделиться
  • 1
    Вы будете путать людей, используя let в ответе на вопрос с 2009 года. :-) – David Murdoch 10 January 2016 в 22:54
  • 2
    Если кто-то узнает ES6, посмотрев let, я сделал им одолжение ;-) – galarant 11 January 2016 в 00:24
  • 3
    @galarant Можете ли вы объяснить, почему / как это работает? – Izhar Aazmi 29 February 2016 в 16:02
  • 4
    @IzharAazmi добавил объяснение. Надеюсь, поможет! – galarant 1 March 2016 в 02:57
  • 5
    @DavidMurdoch, но его не 2009 больше :) – mkoryak 24 March 2016 в 01:52

Я предполагаю, что это для игры или для быстро реагирующего типа приложения, следовательно, использование KEYDOWN, чем KEYPRESS.

Изменить: Dang! Я стою исправленным (спасибо Crescent Fresh и David): JQuery (или даже, скорее, базовые хосты DOM) делают not раскрывать детали WM_KEYDOWN и других событий. Скорее, они предварительно переваривают эти данные, и в случае keyDown даже в JQuery мы получаем:

Обратите внимание, что эти свойства являются значениями UniCode. Обратите внимание: мне не удалось найти авторитетную ссылку на документы JQuery, но многие уважаемые примеры в сети относятся к этим двум свойствам.

Следующий код, адаптированный из некоторого java (а не javascript) из-за этого, совершенно неправы ...

Ниже приведены «интересные» части кода ключа:

  value = e.KeyCode;
  repeatCount = value & 0xFF;
  scanCode = (value >> 16) & 0xFF;  // note we take the "extended bit" deal w/ it later.
  wasDown = ((value & 0x4000) != 0);  // indicate key was readily down (auto-repeat)
  if (scanCode > 127)
      // deal with extended
  else
      // "regular" character
2
ответ дан mjv 20 August 2018 в 22:18
поделиться
  • 1
    hm, no go, scanCode всегда приводит к 0. И e.KeyCode должен быть e.keyCode (KeyCode не определен). – David Murdoch 20 November 2009 в 19:35
  • 2
    Эй сейчас ... Привет, подожди ... что? Мы говорим в JScript здесь или еще что-то? – Crescent Fresh 20 November 2009 в 19:36
  • 3
    Yup, Javascript. Или JScript для поклонников IE. :-) – David Murdoch 20 November 2009 в 19:45
  • 4
    @David М. Мой плохой, возможно JQuery & quot; предварительные дайджесты & quot; эти части кода для нас. Сейчас я изучаю это. – mjv 20 November 2009 в 20:04
  • 5
    @mjv: Откуда у вас этот код? Он когда-нибудь работал на вас? AFAIK no DOM-реализация кодирует всю эту информацию в объект события (keydown или нет). – Crescent Fresh 20 November 2009 в 20:08

Обратитесь к этой ссылке Получить код ключа от нажатия клавиши и значения символа для любого кода клавиши

$('input#inp').keyup(function(e){
   $(this).val(String.fromCharCode(e.keyCode)); 
   $('div#output').html('Keycode : ' + e.keyCode);  
});
-1
ответ дан user2269057 20 August 2018 в 22:18
поделиться
  • 1
    Это неверно! Поскольку он не учитывает текущий язык, который включен на клавиатуре пользователя. Например, я вхожу в «ф», но он дает «а» ... – Vadim Guzev 13 October 2015 в 14:20
  • 2
    это неверно, текст изменится в соответствии с раскладкой клавиатуры – Arnold Roa 30 September 2016 в 17:07
Другие вопросы по тегам:

Похожие вопросы: