KeyboardEvent.keyCode veraltet. Was bedeutet das in der Praxis?
Laut MDN, sollten wir definitiv nicht werden mit dem .keyCode-Eigenschaft. Es ist veraltet:
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
Auf W3-Schule, wird dieser Umstand verharmlost und es ist nur eine Randnotiz, die sagen, dass .keyCode
wird für Kompatibilität und ausschließlich die neueste version des DOM-Events-Spezifikation empfehlen, die .key
- Eigenschaft statt.
Das problem ist, dass .key
ist nicht unterstützt von den Browsern, also was sollten wir verwenden? Gibt es etwas, was ich bin fehlt?
.key
unterstützt alle großen browser developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie drei Möglichkeiten, wie es zu handhaben, wie es geschrieben auf den link, den Sie geteilt.
sollten Sie nachdenken, das ist der richtige Weg, wenn Sie möchten, dass cross-browser-Unterstützung.
Könnte es einfacher sein, wenn Sie etwas umsetzen wie diese.
Darüber, dass alle keyCode, die, charCode und keyIdentifier sind veraltet :
charCode
undkeyIdentifier
sind nicht-standard-Funktionen.keyIdentifier
entfernt von Chrom-54-und Opern-41.0keyCode
gibt 0 zurück, auf keypress-Ereignis mit normalen Zeichen auf FF.Die key-Eigenschaft :
Als der Zeitpunkt des Schreibens dieses Artikels, die
key
- Eigenschaft wird unterstützt von allen großen Browsern aus : Firefox 52, Chrom, 55, Safari 10.1, Opera 46. Außer Internet Explorer 11, die hat :nicht-standard-Schlüssel-IDS und falsche Verhalten mit AltGraph. Mehr info
Wenn das wichtig ist und/oder die rückwärts-Kompatibilität ist, dann können Sie feature-Erkennung wie im folgenden code :
Beachten Sie, dass die
key
Wert unterscheidet sich vonkeyCode
oderwhich
Eigenschaften : es enthält den Namen des Schlüssels nicht seinen code. Wenn Ihr Programm benötigt Zeichen' - codes, dann können Sie Gebrauch machen voncharCodeAt()
.Für die einzelnen druckbaren Zeichen, die Sie verwenden können
charCodeAt()
, wenn Sie den Umgang mit Schlüsseln, deren Werte enthält mehrere Zeichen wie ArrowUpdie Chancen sind : prüfen Sie, Sondertasten und handeln entsprechend. So versuchen Sie, die Umsetzung einer Tabelle von Schlüssel-Werte und die entsprechenden
codes
charCodeArr["ArrowUp"]=38
,charCodeArr["Enter"]=13
,charCodeArr[Escape]=27
... und so weiter, werfen Sie bitte einen Blick auf Schlüssel-Werte und Ihre entsprechende codesWerden können, die Sie möchten zu prüfen die Aufwärtskompatibilität ich.e der ältere, Eigenschaften, während Sie verfügbar sind, und nur bei gefallen wechseln Sie zu der neuen :
Siehe auch : die
KeyboardEvent.code
Eigenschaft docs und einige weitere details in diesem Antwort.charCodeArr
Funktion nicht vorhanden ist. AuchcharCodeAt
funktioniert nicht für alle Werte vone.key
. Zum Beispiel, für dieEnter
/Return
- Taste, wird der Wert vone.key
Eigenschaft ist"Enter"
und AusführungcharCodeArr
für diese Zeichenfolge gibt den Wert69
(das ist der ASCII code für das ZeichenE
).TLDR: ich würde vorschlagen, dass Sie sollte verwenden Sie die neue
event.key
undevent.code
Eigenschaften anstelle der legacy lieben. IE und Edge-Unterstützung für diese Eigenschaften, aber unterstützen nicht die neuen Namen noch nicht. Für Sie gibt es eine kleine polyfill das macht diese Ausgabe der standard-Schlüssel/code-name:https://github.com/shvaikalesh/shim-keyboard-event-key
Kam ich zu dieser Frage auf der Suche nach dem Grund der gleichen MDN Warnung OP. Nach der Suche einige mehr, das Problem mit
keyCode
wird klar:Das problem bei der Verwendung
keyCode
ist, dass nicht-englischen Tastaturen produzieren können verschiedene Ausgänge und sogar Tastaturen mit verschiedenen layouts kann inkonsistente Ergebnisse. Plus, es war der Fall vonWenn Sie Lesen Sie in der W3C-spec:
https://www.w3.org/TR/uievents/#interface-keyboardevent
Es geht in eine Tiefe, die beschreiben, was falsch war mit
keyCode
:https://www.w3.org/TR/uievents/#legacy-key-attributes
So, nach dem Aufbau der Grund, warum die legacy-keyCode ersetzt wurde, laßt uns anschauen, was Sie heute tun:
key
undcode
).KeyboardEvent.code
. Auch die Werte fürkey
undcode
sind browser-abhängig. Beide Probleme damitkey
undcode
keine praktische Verwendung im real-life-Anwendungen.key
odercode
? Es ist in der Regel eine physikalische Taste, sondern können davon abhängen, Num Lock und layout auch... Was ist die best practice?MDN hat schon eine Lösung:
https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
key
ist ein browser-spezifische Zeichenfolge wie"Enter"
oder"ArrowUp"
und es gibt keinen standardisierten Weg, um wandeln Sie auf den entsprechenden code. du wirst also noch mehr boilerplate-code zu konvertieren zwischen key & code.