Orientierung
Was brauchst du als Basiswissen?
Du kannst Funktionen schreiben, Elemente mit `getElementById` auswählen und mit onclick u.ä. EventHandler anbinden.
Worum geht es?
Angaben wie `onclick="..."` vermischen HTML und JavaScript. Mit `addEventListener` bleibt im HTML stehen, was es gibt, und in JavaScript, wie sich die Seite verhält. Dabei lernen wir auch das Ereignisobjekt `event` kennen.
Was ist das Ziel?
Du kannst JavaScript in eine externe Datei auslagern, Ereignisbehandlungen registrieren und Informationen über ein Ereignis auswerten.
Erarbeitung
Theorie
Zum Nachlesen: Von getElementById zu querySelector
Bisher wurde ein Element über seine ID ausgewählt:
Das ist weiterhin richtig. `querySelector` kann dasselbe Element mithilfe eines CSS-Selektors auswählen:
Beide Variablen enthalten nun dasselbe Element. Das `#` gehört zum CSS-Selektor für eine ID. Bei einer Klasse wird wie in CSS ein Punkt verwendet:
`querySelector` liefert nur das erste passende Element. Sollen alle passenden Elemente ausgewählt werden, verwendet man `querySelectorAll`:
Einstiegsaufgaben
Vergleiche:
und
Größere Aufgabe: Klicktrainer
Speichere alle drei Dateien in demselben Ordner:
Beim Klicktrainer wird das Feld mit dem Startbutton grün. Nur Klicks auf das grüne Feld zählen als Treffer. Solange das Feld rot ist, werden Klicks ignoriert. Alternativ kann die Leertaste verwendet werden. Der Zurücksetzen-Button stellt die Trefferzahl auf 0 und das Feld wieder auf Rot.
Aufgaben zur Fehlersuche
Rück- und Ausblick
Was muss man wissen/können?
Eine externe JavaScript-Datei wird mit `src` eingebunden. `getElementById` sucht gezielt nach einer ID. `querySelector` verwendet einen CSS-Selektor und `querySelectorAll` wählt alle passenden Elemente aus. `addEventListener` verbindet ein Element mit einer Funktion, ohne JavaScript in das HTML-Element zu schreiben. Das Ereignisobjekt liefert zusätzliche Informationen.
Was können anschließende Themen sein?
Mit Schleifen können wir als Nächstes viele ähnliche Elemente erzeugen, ohne Code immer wieder zu kopieren.