Die geringe Nutzung von HTML-Formularvalidierung
- HTML-Formulare verfügen über einen leistungsstarken Validierungsmechanismus, werden aber kaum genutzt. Viele Menschen wissen nur wenig darüber. Das könnte an einem Designfehler liegen.
Attribute, Methoden und Properties
- Um leere Eingaben zu verhindern, kann das Attribut
required hinzugefügt werden.
- Es gibt drei Möglichkeiten, Eingaben einzuschränken:
- Verwendung bestimmter
type-Attributwerte: "email", "number", "url"
- Verwendung anderer Eingabeattribute wie
"pattern" oder "maxlength"
- Verwendung der DOM-Methode
setCustomValidity: die leistungsfähigste Methode, um beliebige Validierungslogik zu erstellen und komplexe Fälle zu behandeln.
Die Feinheiten der imperativen API
- Die API
setCustomValidity wird nur als Methode bereitgestellt und ist dadurch umständlich zu verwenden.
- Damit lässt sich zum Beispiel eine Funktion wie das Attribut
required umsetzen, um das Absenden eines Formulars zu verhindern, wenn eine Eingabe leer ist.
- Wenn die Eingabe beim initialen Rendern leer ist, muss sie als ungültig gesetzt werden.
Das Boilerplate-Problem
- Die Validierung von Initialwerten ist umständlich.
- Die Validierungslogik wird im
onChange-Handler und in der initialen Render-Phase doppelt ausgeführt.
- Die Kombination aus
useRef + useLayoutEffect + onChange ist komplex.
Was fehlt
- Ein Attribut
custom-validity wird benötigt.
- In deklarativen Frameworks könnte die Eingabevalidierung damit leistungsstark definiert werden.
Die Stärke asynchroner Validierung
- Es lassen sich Fälle behandeln, in denen ein Benutzername nur dann gültig sein soll, wenn er noch nicht verwendet wird.
- Dafür ist ein asynchroner Aufruf an den Server nötig, außerdem wird ein Zwischenstatus benötigt.
Implementierung
- Mit der Funktion
verifyUsername wird die Eindeutigkeit eines Benutzernamens geprüft.
- Mit
useQuery wird der Status der Serveranfrage verwaltet.
- Mit dem Attribut
customValidity wird der Ablauf der asynchronen Validierung beschrieben.
Formular zur Passwortbestätigung
- Es wird ein Formular umgesetzt, in dem ein eingegebenes Passwort erneut eingegeben werden muss.
- Die Validierung erfolgt durch Prüfung, ob beide Eingabefelder übereinstimmen.
Fazit
setCustomValidity kann verschiedenste Validierungsanforderungen erfüllen.
- Eine leistungsstarke API liefert die eigentliche Stärke.
- Es bleibt zu hoffen, dass diese Funktion in die HTML-Spezifikation aufgenommen wird.
Zusammenfassung von GN⁺
- HTML-Formularvalidierung ist leistungsstark, wird aber wenig genutzt. Das könnte an der Komplexität der API liegen.
- Die Methode
setCustomValidity ist ein mächtiges Werkzeug zur Verarbeitung komplexer Validierungslogik.
- Es wird ein Ansatz vorgestellt, mit dem sich komplexe Szenarien wie asynchrone Validierung behandeln lassen.
- Der Artikel bietet nützliche Informationen, die Entwicklern helfen, HTML-Formularvalidierung besser zu nutzen.
1 Kommentare
Hacker-News-Kommentare
Webbrowser erlauben es weiterhin nicht, das Styling der integrierten HTML-Validierungsmeldungen zu ändern, und Chrome sowie Firefox folgen nicht den UI-Richtlinien der jeweiligen OS-Plattform, was mit der Ästhetik eines Projekts kollidiert
<select multiple>Die Verwendung bestimmter
type-Attributwerte (z. B. "email", "number", "url") kann auf Mobilgeräten die optimale Tastatur auslösen und so die User Experience deutlich verbessernDie Leute, die die Spezifikationen schreiben, seien von der realen Nutzung entkoppelt; für einfache Dinge sei das geeignet, aber bei komplexen Formularen sei es besser, sie selbst zu bauen
Jemand bedauert aus eigener Erfahrung, die grundlegende Einfachheit von Formularen übersehen zu haben, und bedankt sich dafür, die Perspektive anderer geteilt zu haben
Es gibt die Bitte, bei Checkboxen mit Label das Attribut "for" zum Label hinzuzufügen, damit ein Klick auf das Label die Checkbox aktivieren/deaktivieren kann
Ein einfaches Beispiel ohne React wird bereitgestellt
Die HTML-Formularvalidierung ist großartig, hat aber ein großes Problem: In Firefox for Android funktioniert sie nicht
Viele Frameworks und Bibliotheken bieten stylbare Validierungsfunktionen, daher muss man sich die Mühe nicht unbedingt machen
Man sollte darauf achten, Validierung nicht übermäßig einzusetzen
Websites, die bei der 2FA-Eingabe fälschlicherweise
type=passwordverwenden, verwirren Passwort-Manager und Browser