Formularvalidierung mit Javascript
Auto-Check
Universalprüfung
Formularvalidierung mit Javascript
Eine der Hauptdomänen von Javascript ist schon seit jeher die Überprüfung von Formularen. Dies zeigt unter anderem auch, wie Javascript wirklich sinnvoll genutzt werden kann: als Dienst am Nutzer, als nützliches, aber optionales Zusatzfeature. Ist Javascript deaktiviert, funktioniert das Formular trotzdem, denn eine serverseitige Überprüfung der Daten ist ohnehin Pflicht. Durch Javascript ist es dann aber möglich, den Benutzern eine unmittelbare Rückmeldung zu geben, wenn etwas mit den Eingaben nicht in Ordnung ist.
Wenn man durchs Web surft, findet man diverse Ansätze, Formulardaten zu validieren, und die meisten davon sind speziell für ein Formular erstellt worden. Dabei bietet Javascript fast alles, um generisch ein beliebiges Formular zu überprüfen. Lediglich ein paar triviale Vorbereitungsschritte sind notwendig, damit das Ganze funktioniert.
Pflichfelder
Formularvalidierung mit Javascript
In einem handelsüblichen Formular sind natürlich nicht immer alle Felder auch Pflichtfelder. Javascript-Code kann nicht erraten, welche Formularelemente ausgefüllt werden müssen und welche nicht. Deswegen werden in das Formular dementsprechende Hinweise eingebaut. Die folgende Konvention kommt zum Einsatz ? es sind allerdings auch andere Möglichkeiten denkbar: Formularfelder, deren Name mit einem Unterstrich beginnt, sind Pflichtfelder. Außerdem werden die Formularfeldnamen in einer etwaigen Fehlermeldung benutzt. Deswegen sollte der Name einigermaßen beschreibend sein. Ein exemplarisches Formular ist im folgenden zu sehen, alle Felder sind Pflichtfelder:
Vorname:
Nachname:
E-Mail:
Gewünschtes Passwort:
Jahresabo
Gewünschte Zahlungsweise:
Die einzige Ausnahme bildet das mehrzeilige Textfeld mit den AGB:
AGB: Unsere AGB
Sie haben keine Rechte.
Formularprüfung
Formularvalidierung mit Javascript
Jetzt geht es an die Überprüfung. Diese kann in eine externe Datei geschrieben und dann mit eingebunden werden ? oder sie landet direkt in der Seite. Nach Initialisierung einiger Hilfsvariablen wird per for-Schleife das gesamte Formular durchlaufen. for ? in funktioniert leider nicht wie gewünscht. Wenn der Name (Eigenschaft name) eines Feldes mit Tiefstrich (_) beginnt, wird es genauer angesehen. Die Eigenschaft type jedes Formularfelds gibt an, was für eine Art von Feld es ist. Je nach Feld läuft die Überprüfung anders ab:
for (var i=0; i < f.elements.length; i++) {
el = f.elements[i];
if (el.name.charAt(0) == "_") {
switch (el.type) {
Textfelder prüfen
Formularvalidierung mit Javascript
Bei Textfeldern ? sowohl einzeiligen als auch mehrzeiligen und auch Passwortfeldern ? ist die Überprüfung einfach: Wenn nichts im Feld steht, liegt ein Fehler vor. Dann wird in die Variable fehler ein entsprechender Text eingebaut, einschließlich des Feldnamens, aber ohne den optisch unschönen Unterstrich:
case "text":
case "password":
case "textarea":
if (el.value == "") {
fehler += el.name.substring(1) + "\n";
}
break;
Checkboxen sind ebenfalls schnell erledigt: Ist eine Checkbox nicht angekreuzt, wird das in der Fehlervariablen vermerkt:
case "checkbox":
if (!el.checked) {
fehler += el.name.substring(1) + "\n";
}
break;
Auswahllisten prüfen
Formularvalidierung mit Javascript
Bei Auswahllisten sind zwei Fälle zu beachten. Entweder kein Element ist ausgewählt ? dann hat die Eigenschaft selectedIndex den Wert ?1. Oder es ist ein sinnloser Wert ausgewählt, etwa ein Element mit der Beschriftung --- bitte wählen ---. Deswegen prüft das Skript auch, ob das value-Attribut des Listenelements leer ist. Falls ja, liegt ebenfalls ein Fehler vor. Diese Überprüfung wird sowohl für herkömmliche als auch für Mehrfach-Auswahllisten durchgeführt:
case "select-one":
case "select-multiple":
if (el.selectedIndex == -1 || el.options[el.selectedIndex].value == "") {
fehler += el.name.substring(1) + "\n";
}
break;
Radiobuttons prüfen
Formularvalidierung mit Javascript
Bleiben nur noch Radiobuttons übrig, was leider etwas komplizierter ist. Hintergrund: Über
bietet Javascript Zugriff auf die so benannte Gruppe aus Radiobuttons. Die for-Schleife jedoch kommt bei jedem Radiobutton einzeln vorbei, die Überprüfung würde also unter Umständen mehrfach ausgeführt werden. Deshalb wird in einer Variablen festgehalten, welche Radiobutton-Gruppen bereits geprüft worden sind.
case "radio":
if (r.indexOf("\t" + el.name + "\t") == -1) {
var gruppe = f.elements[el.name];
var ok = false;
for (var j=0; j
ok = true;
}
}
r += el.name + "\t";
if (!ok) {
fehler += el.name.substring(1)+"\n";
}
break;
Fehler oder nicht
Formularvalidierung mit Javascript
Das war es auch fast schon. Am Ende verrät die Variable fehler, ob das Formular korrekt ausgefüllt worden ist: Ist sie leer, ist alles in Ordnung. Andernfalls wird die folgende Fehlermeldung angezeigt:
if (fehler != "") {
alert("Füllen Sie die folgenden Felder aus:\n\n" + fehler);
return false;
} else {
return true;
}
Wichtig ist dabei, dass der jeweilige Rückgabewert geliefert wird, also true bei korrektem Ausfüllen und false bei einem Fehler. Denn auf genau diesen Rückgabewert kommt es beim Aufruf der Funktion an. Im Formular selbst wird das nämlich abgefragt: