Das habe ich jetzt:
$("input").bind("keydown",function(e){
var value = this.value + String.fromCharCode(e.keyCode);
}
Wenn das e.keyCode
nicht ein ASCII - Zeichen sein kann ( Alt, backspace, del, arrows., Usw.) ... würde ich jetzt muß trim
aus diesen Werten value
irgendwie (vorzugsweise programmatisch - nicht mit Lookup - Tabellen).
Ich benutze jQuery.
Ich muss das keydown
Ereignis nutzen. keyPress
nicht 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.
javascript
jquery
special-characters
keycode
David Murdoch
quelle
quelle
keydown
, um Zeichencodes zu erfassen? Sie werden eine verdammt gute Fahrt erleben : quirksmode.org/js/keys.html (Hinweis: Verwenden Siekeypress
!! )document.onkeydown = function(e){ console.log('Key: ' + e.key); }
Antworten:
Vielleicht habe ich die Frage nicht richtig verstanden, aber können Sie sie nicht verwenden,
keyup
wenn Sie beide Eingaben erfassen möchten?quelle
Durch meine Erfahrung
String.fromCharCode(e.keyCode)
ist unzuverlässig.String.fromCharCode
erwartet Unicode-Zeichen als Argument;e.keyCode
Gibt Javascript-Schlüsselcodes zurück. Javascript-Schlüsselcodes und Unicode-Charcodes sind nicht dasselbe! Insbesondere geben die Zifferntasten eine anderekeycode
als die normalen Zifferntasten zurück (da es sich um unterschiedliche Tasten handelt), währendkeycode
für beideupper
undlowercase
Buchstaben dieselbe zurückgegeben wird (Sie haben in beiden Fällen dieselbe Taste gedrückt), obwohl sie unterschiedlich sindcharcodes
.Zum Beispiel erzeugt der gewöhnliche Zifferntaste 1 ein Ereignis mit
keycode
49, während die Zifferntaste 1 (mit Ein Numlock)keycode
97 generiert. Bei Verwendung mit erhaltenString.fromCharCode
wir Folgendes:String.fromCharCode
erwartet Unicode-Zeichencodes, keine Javascript-Schlüsselcodes. Die Taste aerzeugt ein Ereignis mit einerkeycode
von 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 Unicodecharcode
von 61, während das Zeichen Aeinencharcode
von 41 hat (laut beispielsweise http://www.utf8-chartable.de/ ). Dies sind jedochhex
Werte. Wenn wir in Dezimalzahlen konvertieren, erhalten wir einen Wertcharcode
von 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:
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 normalisierte.keyCode
unde.charCode
, damit Sie sich keine Gedanken darüber machen müssen, welche Art von Taste gedrückt wurde. Das Problem bei der KombinationString.fromCharCode
bleibt bestehen.[1] Ich war eine Weile verwirrt -. Alle Dokumente sagen,
String.fromCharCode
dass ein Unicode erwartet wirdcharcode
, 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.quelle
keyCode
geht 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.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
65
inA
using 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!
Versuchen Sie das folgende Code-Snippet mit diesem statischen Array-Lookup-Ansatz ...
Code-Snippet anzeigen
Bemerkenswerte Schlüsselcodes
Buchstaben AZ: (65-90)
Ziffern 0-9: (48-57)
Nummernblock 0-9: (96-105)
Pfeiltasten: (37-40)
Tabulatortaste: (9)
Eingabetaste: (13)
Leertaste: (32)
Betriebssystemspezifischer Schlüssel (91) Windows-Schlüssel (Windows) oder Befehlstaste (Mac)
Alt-Taste: (18)
Steuertaste: (17)
Umschalttaste: (16)
Feststelltaste: (20)
quelle
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:
Wenn Sie neugierig sind, warum, ist dies anscheinend aufgrund des Verhaltens der integrierten JS-Funktion erforderlich
String.fromCharCode()
. Für WertekeyCode <= 96
scheint es mit der Funktion abzubilden:chrCode = keyCode - 48 * Math.floor(keyCode / 48)
Für Werte
keyCode > 96
scheint 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.
quelle
let
eine Antwort auf eine Frage aus dem Jahr 2009 verwenden. :-)let
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:
quelle
keydown
oder nicht).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/
Vielen Dank an DaveAlger, der mir das Tippen erspart hat - und viel Entdeckung! - durch Bereitstellung des Named Key Arrays.
quelle
Ich schrieb vor kurzem ein Modul namens Keysight Technologies , das übersetzt
keypress
,keydown
undkeyup
Ereignisse in Zeichen und Tasten sind.Beispiel:
quelle
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
quelle
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'
.event.key
'x'
'X'
'F5'
quelle
Unter diesem Link erhalten Sie den Schlüsselcode vom Tastendruck und den Zeichenwert für einen beliebigen Schlüsselcode
quelle