Ist es OK, Sie zu ignorieren keydown-Ereignisse mit keyCode = 229?
Am Anfang wollte ich die überwachung der änderungen an einem <input type="text">
in Echtzeit (zum Beispiel, genau dann, wenn der Benutzer eine Taste drückt). Die onChange
Ereignis nicht funktionieren, weil es nur ausgelöst wird, wenn der Benutzer die EINGABETASTE drückt oder entfernt den Fokus von der input-element. Dann sah ich diese Frage auf StackOverflow. Ich habe versucht, den code aus, dass die Antwort, aber das problem ist, dass ich nicht benachrichtigt werden willst drückt, die repräsentieren nicht druckbare Zeichen, also musste ich es ändern, auf diese Weise zu machen, stellen Sie sicher, dass es gibt druckbare Zeichen in den Veranstaltungen:
...
textInputElement.onKeyDown.listen((KeyboardEvent ev) {
if (new String.fromCharCode(ev.keyCode).length > 0) {
callAFunction();
}
});
...
(+ die gleiche änderung für die onKeyUp
event)
Wenn ich getestet, diese im Dartium ich sah, dass durch die Konzentration im input-element und drücken Sie dann eine beliebige Taste, ein keydown
Ereignis wird ausgelöst, mit ev.keyCode = ev.which = 229
und ev.charCode = 0
. Unmittelbar nach diesem Ereignis ein weiterer keydown
Ereignis wird ausgelöst, mit der richtigen ev.keyCode = ev.which
von der gedrückten Taste und ev.charCode = 0
. Ich Verstand nicht, wo diese 229 Schlüssel war aus, aber ich sah, dass es ein druckbares Zeichen, å
. Ich suchte im Internet und ich habe festgestellt, dass andere haben dieses Problem, und manchmal sind Sie mit anderen Programmiersprachen und-Technologien. Einen entsprechenden link ist diese und die ausgewählte Update ist in diese sehr kleine verpflichten - wählten Sie, um alle Ereignisse ignoriert, die keyCode = 229
mit der Erklärung, dass die neuesten Versionen von Chrome/Chromium/WebKit begonnen, senden Sie diese keydown-Ereignisse vor jedem standard, Tastatur-Ereignisse, und Ihre Bedeutung ist, dass die Benutzer drückt einen Taster. aber-input-Methode ist immer noch die Verarbeitung, die oder input method editor ist die Bearbeitung der Schlüssel-Eingang.
Meine Frage ist, ist es OK, Sie zu ignorieren keydown
Veranstaltungen mit keyCode = 229
wenn new String.fromCharCode(229)
gibt druckbare Zeichen "å
"? Ich dachte über die mögliche situation, dass ein echter Schlüssel, der produziert den gleichen Schlüssel code und seine entsprechenden Charakter.
Ich danke Euch für jede Art von Hilfe!
InformationsquelleAutor silviubogan | 2014-07-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die kurze Antwort ist Nein. Sie können Sie ignorieren, keydown-Ereignisse mit keyCode = 229, aber nur, wenn Sie Folgen unmittelbar nach einem keypress-Ereignis.
Wenn man bestimmte Tasten gedrückt, einige Browser senden eine wiederholte keydown-Ereignis mit einem keyCode Wert von 229, während andere senden Sie das original keydown-keyCode wieder. Einige Browser senden eine " 0 " als keyCode Zusammenhang mit dem keypress-Ereignis, und legen Sie die Zeichen-code in eine charCode-Eigenschaft.
In allen Fällen, so weit wie ich kann sagen aus meinen tests, die Reihenfolge der Ereignisse ist immer vorhersagbar:
Den Buchstaben å ist in einer Reihe von skandinavischen Sprachen. Hier sind die Veranstaltungen erhalten Sie im Safari 6.1.5 wenn die Tastatur eingestellt ist Schwedisch oder Finnisch, und die å-Zeichen (Links neben der P-Taste) gedrückt:
Beachten Sie, dass die erste keydown-keyCode 219, nicht 229.
Generieren 229 keyCode auf der ersten keydown-Ereignis, drücken Sie eine beliebige "dead key". Auf der schwedischen Tastatur auf dem Mac, zum Beispiel, die Taste gleich Links neben der BACKSPACE-Taste (akut-Akzent), wie Sie in Worten wie ein déjà-vu. Wenn Sie drücken, einen Toten Schlüssel, die Zeichen in dem Eingabefeld erscheint, aber die Einfügemarke nicht verschieben. Wenn Sie anschließend geben Sie ein Zeichen, das mit ihm kombiniert werden, der browser kann, ersetzen Sie den ersten Toten-Schlüssel Zeichen mit einem zusammengesetzten Zeichen ( + e = é), das seine eigenen Unicode-Wert.
Hier sind die Ereignisse, die Sie sehen in Safari 6.1.5, wenn der Benutzer drückt und wieder loslässt, gefolgt von e auf einer schwedischen Tastatur:
Beachten Sie, dass es keine Tastendruck-Ereignisse gesendet werden, denn es gibt kein "é" - Taste als solche, die gedrückt wurde. Wenn Sie möchten, um zu bestimmen, welche Zeichen, das der Benutzer eingegeben sind, können Sie warten, bis nach dem zweiten keyup, dann Lesen Sie die Zeichen aus dem Eingabefeld.
In anderen Worten, Sie können ignorieren, die keydown-Ereignisse mit einem keyCode 229 nach ein keypress-Ereignis, aber wenn Sie alle ignorieren 229 keyCodes können Sie verhindern, dass Benutzer das hinzufügen von verschiedenen diakritischen Zeichen.
Weitere Informationen über keyCode 229, von der w3.org Ort: keyCode-Eigenschaft von key-events
InformationsquelleAutor James Newton