Obtenir la valeur de caractère de KeyCode en JavaScript... puis couper

c'est Ce que j'ai maintenant:

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

Si le e.keyCode peut-être pas un caractère ASCII ( Alt , backspace , del , flèches , etc.)... J'aurais maintenant besoin de trim ces valeurs de value d'une façon ou d'une autre (de préférence par programmation - pas avec des tables de recherche).

j'utilise jQuery.

je dois utiliser l'événement keydown . keyPress ne s'active pas de certaines touches je dois capturer ( Esc , del , backspace , etc.).

Je ne peux pas utiliser setTimeout pour obtenir la valeur de l'entrée. setTimeout(function(){},0) est trop lent.

133
demandé sur Kevin Guan 2009-11-20 20:49:08

9 réponses

peut-être que je n'ai pas compris la question correctement, mais pouvez-vous ne pas utiliser keyup si vous voulez capturer les deux entrées?

$("input").bind("keyup",function(e){
    var value = this.value + String.fromCharCode(e.keyCode);
});
149
répondu David 2013-11-25 14:58:44

d'après mon expérience, String.fromCharCode(e.keyCode) n'est pas fiable. String.fromCharCode attend des charcodes unicode comme argument; e.keyCode renvoie des keycodes javascript. Les clés Javascript et les charcodes unicode sont et non la même chose! En particulier, les touches numberpad renvoient un keycode différent des touches du numéro ordinaire (puisqu'il s'agit de touches différentes) alors que le même keycode est retourné pour les deux lettres upper et lowercase (vous avez appuyé sur le même 151990920".

par exemple, la touche de chiffre ordinaire 1 génère un événement avec keycode 49 tandis que la touche de chiffre 1 (avec Numlock on) génère keycode 97. Utilisé avec String.fromCharCode nous obtenons le suivant:

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

String.fromCharCode attend des charcodes unicode, pas des keycodes javascript. La touche un génère un événement avec un keycode de 65, indépendant du cas du caractère qu'il générerait (il y a aussi un modificateur pour si la touche Shift est pressée, etc. dans le cas). Le caractère a a un unicode charcode de 61 tandis que le caractère A a un charcode de 41 (selon, par exemple, http://www.utf8-chartable.de / ). Cependant, ce sont des valeurs hex , converties en décimales il nous donne un charcode de 65 pour" A "et 97 pour"a".[1] Ceci est cohérent avec ce que nous obtenons de String.fromCharCode pour ces valeurs.

ma propre exigence se limitait au traitement de chiffres et de lettres ordinaires (acceptation ou rejet selon la position dans la chaîne) et à la mise en place de caractères de contrôle ( F - touches, Ctrl - quelque chose). Ainsi, je peux vérifier les caractères de contrôle, si ce n'est pas un contrôle caractère je vérifie par rapport à une gamme et seulement alors je dois obtenir le caractère réel. Etant donné que je ne m'inquiète pas de case (je change toutes les lettres en majuscules de toute façon) et que j'ai déjà limité la gamme de keycodes, Je n'ai qu'à m'inquiéter des touches numberpad. Il suffit pour cela:

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

plus généralement, une fonction pour retourner de manière fiable le caractère d'un charcode serait génial (peut-être comme un plugin jQuery), mais je n'ai pas le temps de l'écrire tout à l'heure. Désolé.

je mentionnerais aussi e.which (si vous utilisez jQuery) qui normalise e.keyCode et e.charCode , de sorte que vous n'avez pas besoin de vous soucier de quel type de clé a été pressé. Le problème de la combinaison avec String.fromCharCode reste.

[1] j'ai été confus pendant un certain temps. tous les docs disent que String.fromCharCode attend un unicode charcode , alors que dans la pratique, il semblait fonctionner pour les charcodes ASCII, mais c'était je pense dû à la nécessité de convertir à la décimale de hex, combiné avec le fait que les charcodes ASCII et les charcodes décimaux unicode se chevauchent pour les lettres latines ordinaires.

178
répondu Adam 2015-11-24 20:55:01

noms de clés lisibles indexés par code de clé

il y a relativement peu de codes clés donc j'ai simplement énuméré toutes les valeurs correspondantes dans un tableau statique donc je pourrais simplement convertir le nombre 65 en A en utilisant keyboardMap[65]

tous les codes clés ne correspondent pas à un caractère imprimable de sorte qu'une autre chaîne identifiable est retournée.

vous pouvez avoir besoin de modifier le tableau pour convenir vos besoins et peut simplement retourner des chaînes vides pour tous les caractères que vous ne vous souciez pas de traduire. Le tableau suivant me permet de déterminer rapidement et de façon fiable quelle touche a été pressée dans n'importe quel environnement. Profitez-en!

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

Note: la position de chaque valeur dans le tableau ci-dessus est importante. les "" sont des espaces réservés pour les codes dont les valeurs sont inconnues.

essayez l'extrait de code suivant en utilisant cette approche de recherche de tableau statique...

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>

codes de Clé intéressant de noter

Lettres A-Z: (65-90)

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

chiffres 0-9: (48-57)

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

Pavé Numérique 0-9: (96-105)

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

Flèches: (37-40)

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

Touche De Tabulation: (9)

keyboardMap[9];  // TAB

Entrer La Clé: (13)

keyboardMap[13];  // ENTER

Clé Spacebar: (32)

keyboardMap[32];  // SPACE

clé spécifique OS (91) clé Windows (Windows) ou clé de commande (Mac)

keyboardMap[91];  // OS_KEY

Touche Alt: (18)

keyboardMap[18];  // ALT

Clé De Contrôle: (17)

keyboardMap[17];  // CONTROL

Touche Shift: (16)

keyboardMap[16];  // SHIFT

Serrure Caps: (20)

keyboardMap[20];  // CAPS_LOCK
71
répondu DaveAlger 2015-11-13 21:22:30

juste une remarque importante: la réponse acceptée ci-dessus ne fonctionnera pas correctement pour le keyCode >= 144, c.-à-d. période, virgule, tiret, etc. Pour ceux que vous devriez utiliser un algorithme plus général:

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

si vous êtes curieux de savoir pourquoi, cela est apparemment nécessaire en raison du comportement de la fonction JS intégrée String.fromCharCode() . Pour les valeurs de keyCode <= 96 il semble cartographier en utilisant la fonction:

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

pour valeurs de keyCode > 96 il semble cartographier en utilisant la fonction:

chrCode = keyCode

Si cela semble étrange comportement..Je suis d'accord. Malheureusement, ce serait très loin de la chose la plus étrange que j'ai vu dans le noyau 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
répondu galarant 2017-12-28 23:32:57

je suppose que c'est pour un jeu ou pour un type d'application à réponse rapide d'où L'utilisation de KEYDOWN que KEYPRESS.

Modifier : Dang! Je suis corrigé (Merci Crescent Fresh et David): JQuery (ou même plutôt les hôtes DOM sous-jacents) ne pas exposer le détail du WM_KEYDOWN et d'autres événements. Ils pré-digèrent plutôt ces données et, dans le cas de keyDown même dans JQuery, nous obtenons:

notez que ces propriétés sont les valeurs UniCode.

Note, je n'ai pas pu trouver de référence autoritaire à cela dans JQuery docs, mais de nombreux exemples réputés sur le net font référence à ces deux propriétés.

le code, adapté d'un de mes java (pas javascript), est donc totalement erroné...

ce qui suit vous donnera les parties "intéressantes" du code:

  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
répondu mjv 2009-11-20 19:26:13

en réponse à ce problème, je viens d'écrire un plugin jQuery: https://github.com/bpeacock/key-to-charCode/

c'est un peu bas et sale et pourrait être mieux intégré dans jQuery, mais c'est un début.

2
répondu Brian Peacock 2013-04-03 23:40:44

je sais que c'est une vieille question, mais je suis tombé sur elle aujourd'hui à la recherche d'une solution préemballée à ce problème, et n'a trouvé rien qui répond vraiment à mes besoins.

Voici une solution (en anglais seulement) qui prend en charge correctement les majuscules (décalé), les minuscules, ponctuation, pavé numérique, etc.

il permet également l'identification simple et directe de-et la réaction à - clés non imprimables, comme ESC, flèches, touches de fonction, etc.

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

keyboardCharMap and keyboardNameMap are the key to making this work

merci à DaveAlger de m'avoir épargné un peu de Dactylographie - et beaucoup de découverte! - en fournissant le tableau de clés nommé.

0
répondu BRebey 2016-06-26 10:22:34

j'ai récemment écrit un module appelé keysight qui traduit keypress , keydown , et keyup événements en caractères et clés respectivement.

exemple:

 element.addEventListener("keydown", function(event) {
    var character = keysight(event).char
 })
0
répondu B T 2016-08-05 03:24:56

voir ce lien Obtenir le Keycode de la touche et le char de la valeur d'une clé de code

$('input#inp').keyup(function(e){
   $(this).val(String.fromCharCode(e.keyCode)); 
   $('div#output').html('Keycode : ' + e.keyCode);  
});
-1
répondu user2269057 2013-04-11 06:32:10