Workshop: Formularfeedback mit dezentem Javascript (Update)
In diesem Workshop soll es nicht darum gehen, Formulareingaben auf Plausibilität zu prüfen, sondern darum, ob erforderliche Eingaben überhaupt gemacht wurden, und wie man den Benutzer auf fehlende Eingaben hinweisen kann.
Das Szenario:
Ein Kommentarformular mit den Eingabefeldern Name, E-Mail-Adresse, Website und Kommentar. Bis auf Website müssen alle Felder ausgefüllt werden, sonst wird der Kommentar nicht abgeschickt. Aber wie macht man einem Benutzer klar, dass sein Kommentar nicht gepostet wurde, weil er vergessen hat, seinen Namen einzutragen, bevor er auf „Abschicken“ geklickt hat?
Es wäre natürlich ein leichtes, die Eingaben nach dem Abschicken mit PHP zu überprüfen – allerdings wird dabei das gesamt Submit-Script bis zum Ende durchlaufen, ohne dass man es abbrechen kann. Man muss den Benutzer also immer auf eine neue Seite umleiten, auf der er dann letztendlich auf die fehlende Eingabe hingewiesen werden kann.
Besser wäre es, man man könnte direkt nach dem Klick auf den Submit-Button, aber noch vor dem folgenden Programmablauf auf fehlende Eingaben prüfen. Mit PHP geht das nicht, aber mit Javascript.
Beispiel
Wie das aussehen kann, können Sie im Kommentarformular zu diesem Beitrag ausprobieren. Tragen Sie gar nichts ein, wird nach dem Klick auf den Abschicken-Button direkt darunter die Meldung angezeigt: „Bitte tragen Sie noch Ihren Namen, eine E-Mail-Adresse und einen Kommentar ein.“ Haben Sie nur Ihre E-Mail-Adresse vergessen, steht dort nach dem Abschicken: „Bitte tragen Sie noch eine E-Mail-Adresse ein.“ usw.
Und wie funktioniert das?
Das eigentliche Geheimnis liegt beim Submit-Button, der sieht im HTML-Code nämlich so aus:
<input type="submit" name="kommentarabschicken" value="Abschicken" onclick="return kommentar_eingabe_check();">
Das
onclick-Argument bedeutet nichts anderes, als dass nach dem Klick eine Javascript-Funktion aufgerufen wird. Nur wenn diese den Wert true zurückgibt, wird das Submit-Script abgearbeitet, bei false wird es abgebrochen.
In der Javascript-Funktion return kommentareingabecheck() wird geprüft, ob alle erforderlichen Felder ausgefüllt wurden. Wenn nein, wird per innerHTML ein entsprechender Fehlertext in ein leeres div (in diesem Fall mit der ID „fehler“)geschrieben, was im Browser sofort angezeigt wird, und der Wert false zurückgegeben. Das Submit-Script wird daraufhin abgebrochen und der Benutzer kann die fehlenden Eingaben nachtragen.
Die Javascript-Funktion:
function kommentar_eingabe_check() {
ok=true;
meldung='';
if (document.getElementById('name').value.length < 1) {
meldung = 'Ihren Namen';
ok=false;
}
if (document.getElementById('eMail').value.length < 1) {
if (!meldung=='' && document.getElementById('msg').value.length < 1) {
meldung += ', eine E-Mail-Adresse';
} else if (!meldung=='' && document.getElementById('msg').value.length > 0) {
meldung += ' und eine E-Mail-Adresse';
} else {
meldung = 'eine E-Mail-Adresse';
}
ok=false;
}
if (document.getElementById('msg').value.length < 1) {
if (!meldung=='') {
meldung += ' und einen Kommentar';
} else {
meldung = 'einen Kommentar';
}
ok=false;
}
if (ok==false) {
document.getElementById('fehler').innerHTML = '<p class="fehler">Bitte tragen Sie noch ' + meldung + ' ein.
';
}
return ok;
}
Nachteile
Hat ein Benutzer Javascript in seinem Browser deaktiviert, funktionert diese Methode nicht. Allerdings bin ich der Meinung, dass man im nun schon einigermaßen fortgeschrittenen 21. Jahrhundert auf Javascript-Ausschalter keine Rücksicht mehr nehmen muss.
Update
Auf diverse Anregungen hin (danke an Martin für den trim()-Vorschlag) habe ich das Script so modifiziert, dass Leerzeichen nicht mehr als gültige Eingabe zugelassen werden. Das geänderte Script finden Sie in den Kommentaren.
Ähnliche Beiträge:
Applescript: Ansicht für das aktuelle Finder-Fenster verändern Carol Welsman
Kommentare:
Bei den Kommentaren handelt es sich um fremde Inhalte, die sich „esse est percipi“ nicht zueigen macht. Verantwortlich für den Inhalt eines Kommentars ist der jeweilige Verfasser.
Es fehlt eine Kleinigkeit, nämlich der Test darauf, ob auch ein Kommentar eingegeben wurde (wie der vorangegangene »Kommentar« zeigt.
Hm, mit welchem Browser hast du das geschafft? Mit Safari, Firefox und IE7 wird angezeigt: „Bitte tragen Sie noch einen Kommentar ein.“
Ich denke, das hat er mit einem „blank“ geschafft?! :-)
Sorry, dass ich den Livetest gemacht habe.
Man kann Leerzeichen im Kommentar eingeben, dann wird es trotzdem gesichert.
Ah, okay. Das hat aber bis zu diesem Workshop noch nie jemand getan (es wurde schon immer lediglich geprüft, ob ein Feld leer ist), von daher spare ich mir eine weitere inhaltliche Überprüfung.
Ich habe aber mal die Anzahl der Zeichen angepasst, so dass man jetzt mindestens 3 Leerzeichen eingeben muss … ;-)
Man könnte ja mal trim() auf den vermeintlichen Kommentartext loslassen und schauen, was übrig bleibt…
Korinthekackerei, aber
message !='
kommt mit einem Zeichen weniger als
!message == '
aus. :-)
revolutionär!!!!!!!!
dgfd dggdg dfgdfg df dg fdg
Barrierefreies JavaScript – http://ichwill.net/
Ich bekenne mich zur Nutzung von NoScript in Firefox (sehr angenehm!) sowie zur gelegentlichen Nutzung von Dillo und Lynx.
Übrigens kommt hier nach dem Absenden einfach nur eine leere Seite, wenn man keine Mailadresse eingegeben hat.
@ Björn: Ich sah das „aber“ kommen, aber dass das ein gestandener Programmierer viel eleganter löst als ich, überrascht mich nicht ;-)
Vielen Dank für deine Version, ich habe da einiges draus gelernt – in Zukunft werde ich das Prototype-Objekt mit Sicherheit auch einsetzen.
Leider habe ich erst jetzt Gelegenheit, als »Verursacher« der Diskussion noch einmal etwas dazu beizutragen.
Ich habe das Script, ohne es mir anzusehen, mit Safari 3.0.3 ausprobiert. Anscheinend muss ich tatsächlich ein Leerzeichen hinterlassen haben (wie und warum ist mir schleierhaft?!), denn nachdem ich es jetzt in der ursprünglichen Fassung »nachgebaut« habe, hat es mit dem leeren Feld funktioniert (es wurde ein Hinweis ausgegeben).
Schön, dass ich auf diesem Wege die JavaScript-Fähigkeiten des geschätzten Herrn Preidel und wahrscheinlich auch einiger Mitlesender (mich selbst eingeschlossen) indirekt noch weiter verbessern konnte :-)
man kann formulare auch abschicken ohne auf den „abschicken“-button zu klicken. vielleicht wäre ein onsubmit im form-tag besser.
Kommentar schreiben:
FAQ (Häufig gestellte Fragen)
Kommentare:
- Michael Preidel zu Pasta dell’Orto
- Stefan zu Pasta dell’Orto
- Michael Preidel zu CookieCrumble Testflight jetzt auch für macOS
- Götz zu CookieCrumble Testflight jetzt auch für macOS
- Michael Preidel zu Harbor – Sicherer Hafen [Testflight]
- Henning zu Harbor – Sicherer Hafen [Testflight]
Schlagwörter

