Pregunta

Esto es lo que tengo ahora:

$("input").bind("keydown",function(e){
    var value = this.value + String.fromCharCode(e.keyCode);
}

Si el e.keyCode no puede ser un carácter ASCII (Alt, la tecla de retroceso, del, flechas, etc.)...Yo ahora necesitaría trim estos valores de value de alguna manera (preferiblemente mediante programación - no con tablas de búsqueda).

Estoy usando jQuery.

Debo utilizar la keydown evento. keyPress no activar para ciertas teclas necesito capturar (Esc, del, la tecla de retroceso, etc.).

No puedo utilizar setTimeout para obtener el valor de entrada. setTimeout(function(){},0) es demasiado lento.

¿Fue útil?

Solución

Tal vez no he entendido bien la pregunta, pero no se puede utilizar keyup si desea capturar ambas entradas?

$("input").bind("keyup",function(e){
    var value = this.value + String.fromCharCode(e.keyCode);
});

Otros consejos

En mi experiencia String.fromCharCode(e.keyCode) es poco fiable. String.fromCharCode espera charCodes Unicode como un argumento; e.keyCode vuelve javascript códigos de teclas. códigos de teclas de Javascript y charCodes Unicode son no lo mismo! En particular, las teclas numérico devuelven un keycode diferente de las teclas numéricas ordinarias (ya que son claves diferentes), mientras que el mismo keycode es devuelto por tanto letras upper y lowercase (que pulsó la misma clave en ambos casos), a pesar de ellos con diferente charcodes .

Por ejemplo, el número de la llave ordinaria 1 genera un evento con keycode 49, mientras que la tecla numérico 1 (con Numlock en) genera keycode 97. Se utiliza con String.fromCharCode obtenemos lo siguiente:

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

String.fromCharCode espera charCodes Unicode, no códigos de teclas de javascript. La tecla a genera un evento con un keycode de 65, independentant del caso del carácter que generaría (hay también un modificador para si Shift se pulsa la tecla , etc., en el evento). El carácter a tiene un charcode Unicode de 61 mientras que el carácter A tiene un charcode de 41 (de acuerdo con, por ejemplo, http://www.utf8-chartable.de/ ). Sin embargo, esas son valores hex, la conversión a decimal nos da una charcode de 65 para "A" y 97 para "a". [1] Esto es consistente con lo que obtenemos de String.fromCharCode para estos valores.

Mi propio requisito se limita a procesar números y las letras ordinarias (aceptar o rechazar en función de la posición de la cadena) y dejar que los caracteres de control ( F teclas situadas, Ctrl -algo) a través. De esta manera puedo comprobar si los caracteres de control, si no es un carácter de control verifico contra un rango y sólo entonces necesito para obtener el carácter real. Teniendo en cuenta que no estoy preocupado por caso (cambio de todas las letras en mayúsculas de todos modos) y ya han limitado la gama de códigos de teclas, lo único que tiene que preocuparse de las teclas numérico. Las siguientes es suficiente para que:

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

De forma más general, una función para devolver de forma fiable el personaje de un charcode sería grande (tal como un plugin de jQuery), pero no tengo tiempo para escribir hace un momento. Lo sentimos.

También me menciono e.which (si estás usando jQuery) que normaliza e.keyCode y e.charCode, por lo que no tiene que preocuparse acerca de lo que se ha pulsado especie de llave. El problema con la combinación con String.fromCharCode permanece.

[1] Estaba confundido por un tiempo -. todos los documentos dicen que String.fromCharCode espera una charcode Unicode, mientras que en la práctica parece que ha funcionado para charCodes ASCII, pero que se creo debido a la necesidad de convertir a decimal del hexagonal, combinada con el hecho de que charCodes ASCII y charCodes Unicode decimales se superponen para las letras latinas ordinarios.

nombres clave de lectura mecánica indexados por código de clave

Hay relativamente pocos códigos clave por lo que simplemente una lista de los valores correspondientes en una matriz estática para que pudiera simplemente convertir el número en 65 A usando keyboardMap[65]

No todos los códigos de tecla se asigna a un carácter imprimible así se devuelve alguna otra cadena de identificación.

Es posible que deba modificar la matriz para que se adapte a sus necesidades y simplemente puede volver cadenas vacías para todos los caracteres que no se preocupan de traducir. La siguiente matriz me permite determinar de forma rápida y fiable qué tecla se ha pulsado en cualquier entorno. Disfrutar!

// 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]
];
  

Nota:.. La posición de cada valor de la matriz anterior es importante El "" son marcadores de posición para códigos con valores desconocidos

Trate el siguiente fragmento de código usando este enfoque matriz de búsqueda estática ...

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>


códigos clave vale la pena destacar

Letters A-Z: (65-90)

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

dígitos 0-9: (48-57)

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

Número Pad 0-9: (96-105)

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

teclas de flecha: (37-40)

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

Tab Clave: (9)

keyboardMap[9];  // TAB

Escribir clave: (13)

keyboardMap[13];  // ENTER

barra espaciadora Clave: (32)

keyboardMap[32];  // SPACE

sistema operativo específico clave (91) tecla de Windows (Windows) o Comando (Mac)

keyboardMap[91];  // OS_KEY

Alt Clave: (18)

keyboardMap[18];  // ALT

Key Control: (17)

keyboardMap[17];  // CONTROL

Shift Key: (16)

keyboardMap[16];  // SHIFT

tecla Caps Lock: (20)

keyboardMap[20];  // CAPS_LOCK

Sólo una nota importante: la respuesta aceptada anterior no funcionará correctamente para keyCode> = 144, es decir, punto, coma, guión, etc. Para aquellos que puedes usar un algoritmo más general:

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

Si usted es curioso en cuanto a por qué, esto es al parecer necesario debido al comportamiento de la incorporada en el JS String.fromCharCode() función. Para valores de keyCode <= 96 parece al mapa usando la función:

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

Para valores de keyCode > 96 parece al mapa usando la función:

chrCode = keyCode

Si esto parece extraño comportamiento continuación well..I de acuerdo. Lamentablemente, sería muy lejos de ser la cosa más rara que he visto en el núcleo 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"/>

Estoy asumiendo que esto es para un juego o para un tipo de respuesta rápida de la aplicación de ahí el uso de keyDown de pulsación de tecla.

Editar : Dang! Mi error (gracias Media Luna fresca y David): jQuery (o incluso más bien los anfitriones DOM subyacentes) no no exponer el detalle de la WM_KEYDOWN y de otros eventos. Más bien pre-digerir estos datos y, en el caso de keyDown incluso en jQuery, obtenemos:

Tenga en cuenta que estas propiedades son los valores Unicode.
Tenga en cuenta, que no era capaz de encontrar una referencia authorititative a la de documentos jQuery, pero muchos ejemplos de buena reputación en la red refiero a estas dos propiedades.

El código siguiente, adaptado de alguna Java (no javascript) de la mina, por lo tanto, es totalmente equivocado ...

La siguiente información le dará las partes "interesantes" del código clave:

  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

Sé que esto es una vieja pregunta, pero me encontré con que hoy en día la búsqueda de un pre-envasados solución a este problema, y no ha encontrado nada que realmente conocí a mis necesidades.

Aquí es una solución de (sólo en inglés) que admite correctamente mayúsculas (desplazado), minúsculas, signos de puntuación, el número de teclado, etc.

Esto también permite una simple y sencilla identificación de los - y la reacción a - no-imprimible claves, como ESC, las Flechas, las teclas de Función, etc.

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

keyboardCharMap and keyboardNameMap are the key to making this work

Gracias a DaveAlger para que me ahorro algunas escribir - y mucho descubrimiento! por medio de la Denominada Matriz de Claves.

Hace poco escribí un módulo llamado keysight que se traduce keypress, keydown y eventos keyup en personajes y claves respectivamente.

Ejemplo:

 element.addEventListener("keydown", function(event) {
    var character = keysight(event).char
 })

Para aquellos de ustedes que vinieron aquí en busca de los valores reales de caracteres Unicode para un código clave, como lo hice, aquí es una función para eso. Por ejemplo, dado el derecho código clave flecha Unicode Esta es la salida de la cadena de \u001B\u005B\u0043 visible

function toUnicode(theString) {
    var unicodeString = '';
    for (var i = 0; i < theString.length; i++) {
        var theUnicode = theString.charCodeAt(i).toString(16).toUpperCase();
        while (theUnicode.length < 4) {
            theUnicode = '0' + theUnicode;
        }
        theUnicode = '\\u' + theUnicode;
        unicodeString += theUnicode;
    }
    return unicodeString;
}

También puede utilizar la propiedad de sólo lectura key . También respeta teclas especiales como cambio etc. y es apoyado por IE9.

Cuando se pulsa un carácter no imprimible o especial, el valor será el de la definida valores clave como 'Shift' o 'Multiply'.

  • Teclado event.key
  • X -> 'x'
  • Shift + X -> 'X'
  • F5 -> 'F5'

Consulte este enlace Obtener código clave de pulsación de tecla y el valor de carbón para cualquier código de la llave

$('input#inp').keyup(function(e){
   $(this).val(String.fromCharCode(e.keyCode)); 
   $('div#output').html('Keycode : ' + e.keyCode);  
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top