Holen Sie sich den Zeichenwert von KeyCode in JavaScript… und schneiden Sie ihn dann zu

152

Das habe ich jetzt:

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

Wenn das e.keyCodenicht ein ASCII - Zeichen sein kann ( Alt, backspace, del, arrows., Usw.) ... würde ich jetzt muß trimaus diesen Werten valueirgendwie (vorzugsweise programmatisch - nicht mit Lookup - Tabellen).

Ich benutze jQuery.

Ich muss das keydownEreignis nutzen. keyPressnicht aktiviert , für bestimmte Tasten I erfassen müssen ( Esc, del, backspace, etc.).

Ich kann nicht verwenden setTimeout, um den Wert der Eingabe zu erhalten. setTimeout(function(){},0)ist zu langsam.

David Murdoch
quelle
11
Sie müssen verwenden keydown, um Zeichencodes zu erfassen? Sie werden eine verdammt gute Fahrt erleben : quirksmode.org/js/keys.html (Hinweis: Verwenden Sie keypress!! )
Crescent Fresh
1
Der Fall des Charakters spielt keine Rolle. Und ich muss für mindestens FF und IE nach oben, unten, links, rechts, esc, del, Rücktaste erfassen; Ein Tastendruck kommt also nicht in Frage. Danke für den Hinweis. :-)
David Murdoch
Als Antwort auf dieses Problem habe ich gerade ein jQuery-Plugin geschrieben: github.com/bpeacock/key-to-charCode Es ist etwas heruntergekommen und schmutzig und könnte besser in jQuery integriert werden, aber es ist ein Anfang.
Brian Peacock
1
Wenn Sie hierher gekommen sind, um das KeyCode-Problem zu lösen, aber wirklich nur sehen möchten, welche Taste gedrückt wurde, lesen Sie diese Antwort . TLDR:document.onkeydown = function(e){ console.log('Key: ' + e.key); }
user1717828

Antworten:

164

Vielleicht habe ich die Frage nicht richtig verstanden, aber können Sie sie nicht verwenden, keyupwenn Sie beide Eingaben erfassen möchten?

$("input").bind("keyup",function(e){
    var value = this.value + String.fromCharCode(e.keyCode);
});
David Hellsing
quelle
10
Dies funktioniert nicht mit anderen Gebietsschemas, die außerhalb des ASCII-Bereichs liegen (z. B. Latein-1, Deutsch, Französisch, Italienisch und Spanisch, wenn Sie dies wissen müssen). Scheitert natürlich auch bei nicht druckbaren Schlüsseln.
Florian Bösch
9
Dies schlägt auch fehl, wenn Zahlen auf dem Nummernblock verwendet werden. E.keyCode ist nicht der ASCII-Code (oder sogar UTF-x).
Tom Chiverton
2
Schlechte Antwort, es funktioniert nicht einmal mit einfachen Charakteren. Semikolon keyCode ist beispielsweise 186, führen Sie einen String.fromCharCode () darauf aus, und Sie erhalten Müll. Das Problem ist, dass keyCode nicht für alle Zeichen ASCII entspricht. Das ASCII-Zeichen für Semikolon ist 59. Das gleiche Problem gilt für jedes Sonderzeichen. KeyCode gibt NICHT den richtigen Code für String.fromCharCode () zurück.
Alexander Tsepkov
193

Durch meine Erfahrung String.fromCharCode(e.keyCode) ist unzuverlässig. String.fromCharCodeerwartet Unicode-Zeichen als Argument; e.keyCodeGibt Javascript-Schlüsselcodes zurück. Javascript-Schlüsselcodes und Unicode-Charcodes sind nicht dasselbe! Insbesondere geben die Zifferntasten eine andere keycodeals die normalen Zifferntasten zurück (da es sich um unterschiedliche Tasten handelt), während keycodefür beide upperund lowercaseBuchstaben dieselbe zurückgegeben wird (Sie haben in beiden Fällen dieselbe Taste gedrückt), obwohl sie unterschiedlich sind charcodes.

Zum Beispiel erzeugt der gewöhnliche Zifferntaste 1 ein Ereignis mit keycode49, während die Zifferntaste 1 (mit Ein Numlock) keycode97 generiert. Bei Verwendung mit erhalten String.fromCharCodewir Folgendes:

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

String.fromCharCodeerwartet Unicode-Zeichencodes, keine Javascript-Schlüsselcodes. Die Taste aerzeugt ein Ereignis mit einer keycodevon 65, unabhängig von der Groß- / Kleinschreibung des Zeichens, das sie erzeugen würde (es gibt auch einen Modifikator für das ShiftDrücken der Taste usw. im Ereignis). Das Zeichen ahat einen Unicode charcodevon 61, während das Zeichen Aeinen charcodevon 41 hat (laut beispielsweise http://www.utf8-chartable.de/ ). Dies sind jedoch hexWerte. Wenn wir in Dezimalzahlen konvertieren, erhalten wir einen Wert charcodevon 65 für "A" und 97 für "a". [1] Dies steht im Einklang mit dem, was wir bekommenString.fromCharCode für diese Werte erhalten.

Meine eigene Anforderung beschränkte sich darauf, Zahlen und gewöhnliche Buchstaben zu verarbeiten (je nach Position in der Zeichenfolge zu akzeptieren oder abzulehnen) und Steuerzeichen ( F-keys, Ctrl-something) durchzulassen. Auf diese Weise kann ich nach Steuerzeichen suchen. Wenn es sich nicht um ein Steuerzeichen handelt, das ich anhand eines Bereichs überprüfe, muss ich erst dann das tatsächliche Zeichen abrufen. Da ich mir keine Sorgen um Groß- und Kleinschreibung mache (ich ändere sowieso alle Buchstaben in Großbuchstaben) und den Bereich der Tastencodes bereits eingeschränkt habe, muss ich mich nur um die Tasten des Nummernblocks kümmern. Dafür genügt:

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

Allgemeiner eine Funktion zum zuverlässigen Zurückgeben des Zeichens von a charcode großartig (möglicherweise als jQuery-Plugin), aber ich habe gerade keine Zeit, sie zu schreiben. Es tut uns leid.

Ich würde auch erwähnen e.which (wenn Sie jQuery verwenden), was normalisiert e.keyCodeund e.charCode, damit Sie sich keine Gedanken darüber machen müssen, welche Art von Taste gedrückt wurde. Das Problem bei der Kombination String.fromCharCodebleibt bestehen.

[1] Ich war eine Weile verwirrt -. Alle Dokumente sagen, String.fromCharCodedass ein Unicode erwartet wird charcode, während es in der Praxis für ASCII-Zeichencodes zu funktionieren schien, aber das lag meiner Meinung nach an der Notwendigkeit, von hexadezimal in Dezimalzahlen umzuwandeln, kombiniert mit der Tatsache, dass sich ASCII-Zeichencodes und Unicode-Dezimalzeichencodes für normale Benutzer überlappen lateinische Buchstaben.

Adam
quelle
2
Dieser Kommentar hat so ziemlich alle meine Probleme gelöst. Es ist erstaunlich für mich, dass jQuery kein "fromKeyCode" implementiert hat, das dem "String.fromCharCode" von Javascript entspricht
Chris J
27
Es scheint, dass das KeyPress-Ereignis dies tut. Siehe stackoverflow.com/a/9350415/209568 . Aus den jQuery-Dokumenten "Beachten Sie, dass Tastendruck und Tastendruck einen Code enthalten, der angibt, welche Taste gedrückt wird, während Tastendruck angibt, welches Zeichen eingegeben wurde. Beispielsweise wird ein Kleinbuchstabe" a "durch Tastendruck und Tastendruck als 65, durch Tastendruck jedoch als 97 gemeldet Ein Großbuchstabe "A" wird von allen Ereignissen als 65 gemeldet. Aufgrund dieser Unterscheidung ist .keydown () oder .keyup () die bessere Wahl, wenn spezielle Tastenanschläge wie Pfeiltasten abgefangen werden. "
Adam
Dies ist äußerst unangenehm für diejenigen von uns, die süchtig nach Keydown sind.
Isaac Bolinger
Ein Hinweis zu diesem letzten Bit über ASCII und Unicode. Unicode hat alle 128 ASCII-Zeichen an derselben Stelle. Dies war beabsichtigt, damit jede ursprünglich als ASCII codierte Datei als Unicode maskiert (und in Unicode konvertiert) werden kann, ohne dass Arbeit erforderlich ist. Erweiterte ASCII-Zeichen befinden sich jedoch nicht an derselben Stelle. Wenn Sie diese Zeichen verwendet haben, haben Sie kein Glück.
DanielM
1
Es keyCodegeht darum zu wissen, welche Taste gedrückt wurde, und nicht zu wissen, welches Zeichen verwendet werden soll. Zum Beispiel hat "U" auf einer Dvorak-Tastatur den gleichen Schlüsselcode wie "F" auf einer QWERTZ-Tastatur oder "ㄹ" auf einer koreanischen Tastatur usw. Es geht nicht darum, es in ein Zeichen umzuwandeln, es ist da, damit Sie es können Ordnen Sie die Dinge einfach einer Tastaturposition zu.
Vincent McNabb
77

Lesbare Schlüsselnamen, die durch Schlüsselcode indiziert sind

Da es relativ wenige Schlüsselcodes gibt, habe ich einfach alle entsprechenden Werte in einem statischen Array aufgelistet, damit ich die Zahl einfach 65in Ausing umwandeln kannkeyboardMap[65]

Nicht alle Schlüsselcodes sind einem druckbaren Zeichen zugeordnet, sodass eine andere identifizierbare Zeichenfolge zurückgegeben wird.

Möglicherweise müssen Sie das Array an Ihre Bedürfnisse anpassen und können einfach leere Zeichenfolgen für alle Zeichen zurückgeben, die Sie nicht übersetzen möchten. Mit dem folgenden Array kann ich schnell und zuverlässig feststellen, welche Taste in einer Umgebung gedrückt wurde. Genieß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]
];

Hinweis: Die Position jedes Werts im obigen Array ist wichtig. Das ""ist Platzhalter für Codes mit unbekannten Werten.

Versuchen Sie das folgende Code-Snippet mit diesem statischen Array-Lookup-Ansatz ...


Bemerkenswerte Schlüsselcodes

Buchstaben AZ: (65-90)

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

Ziffern 0-9: (48-57)

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

Nummernblock 0-9: (96-105)

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

Pfeiltasten: (37-40)

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

Tabulatortaste: (9)

keyboardMap[9];  // TAB

Eingabetaste: (13)

keyboardMap[13];  // ENTER

Leertaste: (32)

keyboardMap[32];  // SPACE

Betriebssystemspezifischer Schlüssel (91) Windows-Schlüssel (Windows) oder Befehlstaste (Mac)

keyboardMap[91];  // OS_KEY

Alt-Taste: (18)

keyboardMap[18];  // ALT

Steuertaste: (17)

keyboardMap[17];  // CONTROL

Umschalttaste: (16)

keyboardMap[16];  // SHIFT

Feststelltaste: (20)

keyboardMap[20];  // CAPS_LOCK
DaveAlger
quelle
Funktioniert nicht für Sonderzeichen, wenn Sie die Tasten mit der Umschalttaste eingeben, gibt es eine Lösung?
Shaik Matheen
14

Nur ein wichtiger Hinweis: Die oben akzeptierte Antwort funktioniert nicht richtig für keyCode> = 144, dh Punkt, Komma, Bindestrich usw. Für diese sollten Sie einen allgemeineren Algorithmus verwenden:

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

Wenn Sie neugierig sind, warum, ist dies anscheinend aufgrund des Verhaltens der integrierten JS-Funktion erforderlich String.fromCharCode(). Für Werte keyCode <= 96scheint es mit der Funktion abzubilden:

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

Für Werte keyCode > 96scheint es mit der Funktion abzubilden:

chrCode = keyCode

Wenn dies seltsam erscheint, dann stimme ich zu. Leider wäre es weit entfernt von dem Seltsamsten, was ich im JS-Kern gesehen habe.

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"/>

Galarant
quelle
1
Sie werden die Leute verwirren, indem Sie leteine Antwort auf eine Frage aus dem Jahr 2009 verwenden. :-)
David Murdoch
12
Wenn jemand ES6 entdeckt, indem er let
nachschaut
@galarant Kannst du bitte erklären warum / wie das funktioniert?
Izhar Aazmi
@ IzharAazmi fügte Erklärung hinzu. Ich hoffe es hilft!
Galarant
1
Es funktioniert auch nicht richtig für die Zifferntasten auf einem Ziffernblock (das Tastenraster rechts von erweiterten Tastaturen).
Scott Buchanan
2

Ich gehe davon aus, dass dies für ein Spiel oder eine schnell reagierende Art von Anwendung ist, daher die Verwendung von KEYDOWN als KEYPRESS.

Edit : Dang! Ich stehe korrigiert da (danke Crescent Fresh und David): JQuery (oder besser gesagt die zugrunde liegenden DOM-Hosts) legen die Details von WM_KEYDOWN und anderen Ereignissen nicht offen. Vielmehr verarbeiten sie diese Daten vorab und im Fall von keyDown erhalten wir sogar in JQuery:

Beachten Sie, dass diese Eigenschaften die UniCode-Werte sind.
Beachten Sie, dass ich in JQuery-Dokumenten keinen maßgeblichen Verweis darauf finden konnte, aber viele seriöse Beispiele im Internet beziehen sich auf diese beiden Eigenschaften.

Der folgende Code, der aus einem Java (nicht Javascript) von mir übernommen wurde, ist daher völlig falsch ...

Im Folgenden finden Sie die "interessanten" Teile des Schlüsselcodes:

  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
mjv
quelle
hm, no go, scanCode ergibt immer 0. Und e.KeyCode sollte e.keyCode sein (KeyCode ist undefiniert).
David Murdoch
Hey jetzt ... Hallo, warte ... was? Wir reden hier über JScript oder so?
Crescent Fresh
@ David M. Mein schlechtes, vielleicht "vorverdaut" JQuery diese Codeteile für uns. Ich schaue jetzt hinein.
MJV
1
@mjv: Woher hast du diesen Code? Hat es jemals bei Ihnen funktioniert? Die AFAIK no DOM-Implementierung codiert alle diese Informationen in das Ereignisobjekt ( keydownoder nicht).
Crescent Fresh
@Crescent: Ich habe es schnell und naiv von einem meiner Java-Codes angepasst, so alt wie das ... Wie auch immer, Sie haben völlig Recht: Keiner der DOM-Hosts verteilt solche rohen Ereignisse, auch nicht für die Tastatur. Ich habe meine Prosa entsprechend korrigiert; Ich
suche
0

Ich weiß, dass dies eine alte Frage ist, aber ich bin heute auf die Suche nach einer vorgefertigten Lösung für dieses Problem gestoßen und habe nichts gefunden, was meinen Anforderungen wirklich entsprach.

Hier ist eine Lösung (nur Englisch), die Großbuchstaben (verschoben), Kleinbuchstaben, Interpunktion, Zifferntastatur usw. korrekt unterstützt.

Es ermöglicht auch die einfache und unkomplizierte Identifizierung und Reaktion auf nicht druckbare Tasten wie ESC, Pfeile, Funktionstasten usw.

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

keyboardCharMap and keyboardNameMap are the key to making this work

Vielen Dank an DaveAlger, der mir das Tippen erspart hat - und viel Entdeckung! - durch Bereitstellung des Named Key Arrays.

BRebey
quelle
Ihre Geige ist am besten! Danke für das Teilen. Es funktioniert hervorragend. Ich verwende es, um eine Mehrfachcursor-Bearbeitung im Sublime-Stil für Formularfelder mit Elementen mit denselben Werten zu implementieren
Todd Hammer
0

Ich schrieb vor kurzem ein Modul namens Keysight Technologies , das übersetzt keypress, keydownundkeyup Ereignisse in Zeichen und Tasten sind.

Beispiel:

 element.addEventListener("keydown", function(event) {
    var character = keysight(event).char
 })
BT
quelle
unterstützt es Schlüssel wie ñ?
Arnold Roa
@ArnoldRoa Ich habe gerade etwas gepusht, das hoffentlich solche Charaktere unterstützt. Ich habe keine Tastatur mit Akzentzeichen. Würde es Ihnen etwas ausmachen, sie zu testen?
BT
0

Für diejenigen unter Ihnen, die hierher gekommen sind, um nach den tatsächlichen Unicode-Zeichenwerten für einen Schlüsselcode zu suchen, wie ich es getan habe, ist hier eine Funktion dafür. Wenn beispielsweise der Unicode-Schlüsselcode mit dem Rechtspfeil angegeben wird, wird die sichtbare Zeichenfolge ausgegeben\u001B\u005B\u0043

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;
}
d'Artagnan Immergrüne Barbosa
quelle
0

Sie können auch die schreibgeschützte Eigenschaft verwenden key. Es respektiert auch spezielle Schlüssel wieshift usw. und wird von IE9 unterstützt.

Wenn ein nicht druckbares oder Sonderzeichen gedrückt wird, ist der Wert einer der definierten Tastenwerte wie 'Shift'oder 'Multiply'.

  • Tastatur     event.key
  • X             -> 'x'
  • Shift+ X ->'X'
  • F5            -> 'F5'
Kim Kern
quelle
-2

Unter diesem Link erhalten Sie den Schlüsselcode vom Tastendruck und den Zeichenwert für einen beliebigen Schlüsselcode

$('input#inp').keyup(function(e){
   $(this).val(String.fromCharCode(e.keyCode)); 
   $('div#output').html('Keycode : ' + e.keyCode);  
});
user2269057
quelle
1
Das ist falsch! Da die aktuelle Sprache, die auf der Tastatur des Benutzers aktiviert ist, nicht berücksichtigt wird. Zum Beispiel gebe ich 'ф' ein, aber es gibt 'a' ...
Vadim Guzev
Dies ist falsch, der Text ändert sich je nach Tastaturlayot
Arnold Roa