📋
M307 - Interaktive Webseiten mit Form
  • Interaktive Webseite mit Formular erstellen
  • Tag 1
    • 01-Interaktive Websites
    • 02-Client-Server-Infrastruktur
    • 03 Einrichtung Entwicklungsumgebung
    • 04 PHP
      • 01 Einführung
      • 02 PHP Konfiguration
      • 03 PHP Übersicht
      • 04 Variablen
      • 05 Script Einbindung
      • 06 Arrays
      • 07 Kontrollstrukturen
      • 08 Interne Funktionen
      • 09 Benutzerdefinierte Funktionen
      • 10 Klassen
      • 11 Best Practices
      • 12 Links
    • 05 Strukturierung
      • Aufbau eines MVC (Schritt für Schritt)
    • 06 PHP Aufgaben
      • 01 Bottles of Beer
      • 02 Einfacher Spamfilter
      • 03 Clowns
      • 04 Pixelgenerator
      • 05 Todo-Liste
      • 06 Login-Funktion
      • 07 Navigation
      • 08 Gemeinsames Template
  • Tag 2
    • 01 Formulare Theorie
      • 01 Informationsgruppierung
      • 02 Design- und Strukturgrundlagen
      • 03 Verarbeiten von Formulardaten
      • 04 Validieren von Formulardaten
    • 02 JavaScript Theorie
      • 01 Einfuehrung
      • 02 JavaScript Übersicht
    • 03 Übungsaufgaben zu JavaScript
      • 01 Schere, Stein, Papier
      • 02 Whack-a-Button
    • 04 JavaScript Validierung
      • 01 Validierung
      • 02 Vor- und Nachteile
      • 03 Aufgabe
  • Tag 3
    • 01 Datenbankanbindung
      • 01 Datenbankanbindung
      • 02 Datenbankverbindung
      • 03 Datenbankabfragen
      • 05 Datenlöschung
      • 04 Datenspeicherung
      • 06 Datenmanipulation
      • 07 Refactoring
    • 02 Testing
    • 03 Security Aufgaben
      • 01 Gruppenarbeit
        • 01 Arbeitsauftrag
        • 02 Cross-Site-Scripting (XSS)
        • 03 SQL-Injections
        • 04 Local File Inclusion
      • 02 Eigenes Formular absichern
      • 03 Karl's Website
    • 04 Applikationssicherheit
Powered by GitBook
On this page
  • Der load Event
  • Der submit Event
  • Umsetzung einer Validierung
  • Formular mit Platzhalter für Fehlerliste
  • Validierung und bei Fehler den submit-Vorgang abbrechen!
  • Ausgabe der Fehlerliste
  • Zusatz für Fortgeschrittene
  • Inline-Fehler

Was this helpful?

Export as PDF
  1. Tag 2
  2. 04 JavaScript Validierung

01 Validierung

Previous04 JavaScript ValidierungNext02 Vor- und Nachteile

Last updated 3 years ago

Was this helpful?

Die Validierung eines Formulars in JavaScript findet clientseitig statt.

Wir möchten die Validierung also ausführen, bevor das Formular an den Server versendet wird.

Der load Event

Mit dem load Event gehen wir sicher, dass der Code innerhalb dieser Funktion erst ausgeführt wird, wenn die komplette Seite vom Client geladen wurde:

window.addEventListener("load", function(){
    // Code wird erst ausgeführt, wenn Seite geladen wurde.
});

Die Unterschiede zwischen verschiedenen Load-Events sind auf [] gut beschrieben. Hauptsächlich geht es darum, ob nur das HTML-Dokument geladen sein muss oder auch alle zusätzlichen Dateien (Bilder, JS, CSS etc.).

Der submit Event

Wird ein Formular versendet, wird vom Browser ein submit Event für das abgesendete Formular ausgelöst.

Auf dieses Event können wir reagieren:

window.addEventListener("load", function(){
    document.querySelector('#formular').addEventListener('submit', function(evt) {
      console.log('Formular wird jetzt versendet.');
    });
});

Der Event-Handler wird ausgeführt, bevor das Formular an den Server versendet wird.

Umsetzung einer Validierung

Ähnlich wie in PHP, kannst du im submit Event deine Formular-Daten validieren.

Wie Du Fehlermeldungen ausgibst, ist dir überlassen. Diese können einfach als Liste am Formularanfang oder direkt «inline» bei den jeweiligen Formularfeldern dargestellt werden.

Auch die Methode um Fehlermeldungen zu sammeln oder darzustellen ist dir überlassen. Hierfür gibt es zahlreiche Möglichkeiten.

Formular mit Platzhalter für Fehlerliste

<form action="login" id="loginForm">

    <p id="errorList"></p> <!-- via CSS ausblenden -->
    <fieldset>
        <div class="form-group">
            <label for="username">Benutzername</label>
            <input type="text" id="username" required>
        </div>
    
        <div class="form-group">
            <label for="password">Passwort</label>
            <input type="password" id="password" required>
        </div>
        </fieldset>
    <input id="submit" type="submit" value="Formular absenden">
</form>

Validierung und bei Fehler den submit-Vorgang abbrechen!

Die übergebene Variable evt hat eine Methode preventDefault. Falls Fehler vorhanden sind, kannst du mittels evt.preventDefault() verhindern, dass das Formular an den Sever versendet wird. Siene Beispiel oben.

window.addEventListener("load", function(){
    document.querySelector('#loginForm').addEventListener('submit', function(evt) {

        var errors  = [];

        // Username validieren
        if(document.querySelector('#username').value === '') {
            errors.push('Bitte gib einen Benutzernamen ein.');
        }

        // Passwort validieren
        var password = document.querySelector('#password').value;
        if(password.length < 6) {
            errors.push('Bitte gib ein Passwort ein, welches mindestens 6 Zeichen lang ist.');
        }
        if(password == password.toLowerCase()) {
            errors.push('Das Passwort muss mindestens einen Grossbuchstaben enthalten.');
        }

        // Das Formular ist nur dann `valid` wenn 0 Fehler vorhanden sind.
        if(errors.length > 0) {
            renderErrors(errors); /* Ausgabe: Siehe unten */
            evt.preventDefault();
        }
        else {
            // Alles OK -> Error-Liste verstecken!
            errorList.style.display = "none";
        }
    });
});

Ausgabe der Fehlerliste

Alle Fehler werden gebündelt im Platzhalter ausgegeben:

    /**
     * Gib die Einträge im `errors` Array mit <br> getrennt 
     * in einem Platzhalter aus.
     *
     * @param array errors
     */
    function renderErrors(errors) {

        var errorList = document.querySelector('#errorList');

        // Alle Fehler mit einem <br> getrennt ausgeben
        errorList.innerHTML = errors.join('<br>');

        // Versteckte Liste anzeigen
        errorList.style.display = "block";
    }

Zusatz für Fortgeschrittene

Inline-Fehler

Folgendes Script gibt die Fehlermeldungen direkt beim zugehörigen Feld aus:

window.addEventListener("load", function(){
    document.querySelector('#inlineForm').addEventListener('submit', function(evt) {

        // Bei einfachen Validierungen kann z. B. auch ein
        // Array für die Felder und Fehlermeldungen
        // verwendet werden. Dieses kann dann in einer forEach
        // Schleife verarbeitet werden.
        var fields = [
            {id: 'username', message: 'Bitte gib einen Benutzernamen ein.'},
            {id: 'password', message: 'Bitte gib ein Passwort ein.'},
        ];
        // Alle vorhandenen Fehlerklassen entfernen
        document.querySelectorAll('.has-error').forEach(element => element.classList.remove('has-error'));
        // Alle vorhandenen Fehlermeldungen entfernen
        document.querySelectorAll('label .error-msg').forEach(element => element.remove());
        fields.forEach(function(field) {
            var fieldElement = document.querySelector('#' + field.id);
            if(fieldElement.value === '') {
                //Wir stoppen das Senden des Formulars durch den Browser, sobald wir einen Fehler entdecken.
                evt.preventDefault();

                // Eine Fehlermeldung generieren
                var errorMessage = document.createElement("span");
                errorMessage.classList.add("error-msg");
                errorMessage.textContent = field.message;

                // Die .has-error Klasse kann in CSS z. B.
                // rot formatiert werden, damit die fehlerhaften
                // Felder direkt ersichtlich sind.
                const formGroup = fieldElement.parentElement // .form-group
                formGroup.classList.add('has-error') // Fehlerklasse hinzufügen
                formGroup.querySelector('label') // Das <label> auswählen
                    .append(errorMessage); // Fehlermeldung hinzufügen
            }
        });
    });
});
https://javascript.info/onload-ondomcontentloaded