5. Unterrichtsblock
Events (Ereignisse)
HTML-Events sind „Ereignisse“, die mit HTML-Elementen passieren. Wenn JavaScript in HTML-Seiten verwendet wird, kann JavaScript auf diese Ereignisse „reagieren“.
Ein HTML-Ereignis kann etwas sein, das der Browser oder ein Benutzer tut.
Hier sind einige Beispiele für HTML-Ereignisse:
- Eine HTML-Webseite wurde vollständig geladen
- Ein HTML-Eingabefeld wurde geändert
- Es wurde auf eine HTML-Schaltfläche geklickt
Oft möchten Sie etwas tun, wenn Ereignisse eintreten. Mit JavaScript können Sie Code ausführen, wenn Ereignisse erkannt werden. HTML ermöglicht das Hinzufügen von Event-Handler-Attributen mit JavaScript-Code zu HTML-Elementen.
Beispiel
<!-- SYNTAX -->
<element event='ein JavaScript'>
<!-- BEISPIEL-->
<button onclick="document.getElementById('demo').innerHTML = Date()">Wie spät ist es?</button>
Im obigen Beispiel ändert der JavaScript-Code den Inhalt des Elements mit id=“demo“.
Im nächsten Beispiel ändert der Code den Inhalt seines eigenen Elements (unter Verwendung von this.innerHTML):
<button onclick="this.innerHTML = Date()">Wie spät ist es?</button>
<!--
JavaScript-Code ist oft mehrere Zeilen lang. Es kommt daher häufiger vor,
dass Ereignisattribute Funktionen aufrufen:
-->
<button onclick="zeigeUhrzeit()">Wie spät ist es?</button>
<script>
function zeigeUhrzeit() {
document.getElementById("demo").innerHTML = Date();
}
</script>
<p id="demo"></p>
Beispiel „onclick“
Klicke auf den Text!
<!DOCTYPE html>
<html>
<body>
<h1 onclick="this.innerHTML = 'Servus!'">Klicke auf den Text!</h1>
</body>
</html>
Beispiel HTML ändern
Hier wird einem Button per JavaScript eine Funktion hinzugefügt.
<!--
Der Button selbst hat noch keine Funktion und auch kein Event.
Über die "id" wird dem Button eine Funktion hinzugefügt.
-->
<button id="meinButton">Klick mich</button>
<p id="demo1"></p>
<script>
document.getElementById("meinButton").onclick = zeigeDatum;
function zeigeDatum() {
document.getElementById("demo1").innerHTML = Date();
}
</script>
</body>
</html>
Aufgabe
Erstelle eine Schrift „Hallo Welt“, welche durch Klick auf einen Button geändert wird in „Hallo schöne Welt“.
- Die Funktion soll über das onclick-Event ausgelöst werden
- Das Event darf jedoch nicht als Attribut im Button-Element hinterlegt werden, sondern soll wie in o.g. Beispiel hinzugefügt werden.
Häufige HTML-Events
Unten gezeigte Events sind nur die am häufigst verwendeten. Die Liste aller Events ist viel länger und hier zu finden: https://www.w3schools.com/jsref/dom_obj_event.asp
Event | Beschreibung |
---|---|
onchange | Ein HTML-Element wurde geändert |
onclick | Der Nutzer klickt auf ein HTML-Element |
onmouseover | Der Nutzer fährt mit der Maus über ein HTML-Element |
onmouseout | Der Nutzer fährt mit der Maus aus einem HTML-Element heraus |
onkeydown | Der Nutzer drückt eine Taste auf der Tastatur |
onload | Der Browser hat die Seite vollständig geladen |
JavaScript-Event-Listener
- Die Methode
addEventListener()
fügt einen Event-Handler an das angegebene Element an. - Die Methode
addEventListener()
fügt einen Event-Handler an ein Element an, ohne vorhandene Event-Handler zu überschreiben. - Man kann einem Element mehrere Event-Handler hinzufügen.
- Man kann einem Element viele Event-Handler des gleichen Typs hinzufügen, d. h. zwei „click“-Events.
- Man kann Event-Listener zu jedem DOM-Objekt hinzufügen, nicht nur zu HTML-Elementen. d.h. auch das „window-object“.
- Die Methode
addEventListener()
erleichtert die Steuerung der Reaktion des Ereignisses auf „bubbling“. - Bei Verwendung der
addEventListener()
-Methode wird das JavaScript vom HTML-Markup getrennt, um die Lesbarkeit zu verbessern, und man kann Event-Listener hinzufügen, selbst wenn man das HTML-Markup nicht steuert. - Man kann einen Event-Listener einfach entfernen, indem man Methode
removeEventListener()
verwendet.
Syntax
element.addEventListener(event, function, useCapture);
- Der erste Parameter ist der Typ des Ereignisses (wie „
click
“ oder „mousedown
“ oder irgendein anderes HTML-DOM-Ereignis.) - Der zweite Parameter ist die Funktion, die wir aufrufen möchten, wenn das Ereignis eintritt.
- Der dritte Parameter ist ein boolescher Wert, der angibt, ob Event-Bubbling oder eine Ereigniserfassung verwendet werden soll. Dieser Parameter ist optional.
Merke: Das Präfix „on“ wird für nicht für Events über die
addEventListener()
Methode verwendet; Man verwendet „click
“ anstelle von „onclick
„.
Beispiel
<!--
In diesem Beispiel wird der Event-Handler "click" mit einer anschließenden Funktion
durch die addEventListener() Methode hinzugefügt.
-->
<button id="myBtn">Klick mich!</button>
<p id="demo2"></p>
<script>
document.getElementById("myBtn").addEventListener("click", zeigeDatum);
function zeigeDatum() {
document.getElementById("demo2").innerHTML = Date();
}
</script>
JavaScript-Event-Handler (Ereignisverarbeiter)
Event-Handler sind ein anderes Wort für „Event inkl. Aktion / Funktion“ und können verwendet werden, um Benutzereingaben, Benutzeraktionen und Browseraktionen zu verarbeiten und zu überprüfen:
- Dinge, die jedes Mal ausgeführt werden sollten, wenn eine Seite geladen wird
- Dinge, die getan werden sollten, wenn die Seite geschlossen wird
- Aktion, die ausgeführt werden soll, wenn ein Benutzer auf eine Schaltfläche klickt
- Inhalt, der überprüft werden sollte, wenn ein Benutzer Daten eingibt
- u.s.w. …
Viele verschiedene Methoden können verwendet werden, um JavaScript mit Ereignissen arbeiten zu lassen:
- HTML-Ereignisattribute können JavaScript-Code direkt ausführen
- HTML-Ereignisattribute können JavaScript-Funktionen aufrufen
- Sie können HTML-Elementen eigene Event-Handler-Funktionen zuweisen
- Sie können verhindern, dass Ereignisse gesendet oder verarbeitet werden
- u.s.w. …
Beispiel mit verschiedenen Event-Handlern
In folgendem Beispiel wird einem Button-Element mehrere Event-Handler mit der Methode addEventListener()
hinzugefügt
<button id="myButton">Try it</button>
<p id="demo4"></p>
<script>
var x = document.getElementById("myButton");
x.addEventListener("mouseover", myFunction);
x.addEventListener("click", mySecondFunction);
x.addEventListener("mouseout", myThirdFunction);
function myFunction() {
document.getElementById("demo4").innerHTML += "Überflieger!<br>";
}
function mySecondFunction() {
document.getElementById("demo4").innerHTML += "Geklickt!<br>";
}
function myThirdFunction() {
document.getElementById("demo4").innerHTML += "Rausgeflogen!<br>";
}
</script>
Beispiel mit zwei gleichen Event-Handlern
In nachfolgendem Beispiel werden zwei gleiche Events mit einem Klick ausgeführt
<!--
Der Variable x wird eine Methode zur Identifikation des Buttons zugewiesen
Im nächsten Schritt erhält x über die Methode addEventListener() zwei Event-Handler
-->
<button id="meinBtn">Klick mich</button>
<script>
var x = document.getElementById("meinBtn");
x.addEventListener("click", meineFnktn);
x.addEventListener("click", eineAndereFunktion);
function meineFnktn() {
alert ("Servus!");
}
function eineAndereFunktion() {
alert ("Diese Funktion wurde auch noch ausgeführt!");
}
</script>
Aufgabe
Erstelle eine rote Fläche mit weißer Schrift, welche bei Klick auf einen Button die Farbe blau erhält. Zusätzlich soll ein Alert erscheinen, der über die ausgeführte Änderung informiert.
- Verwende hierfür die Methode
addEventListener()
Boolesche Werte
Ein JavaScript-Boolean repräsentiert einen von zwei Werten: wahr oder falsch.
Sehr oft benötigt man beim Programmieren einen Datentyp, der nur einen von zwei Werten haben kann, wie z.B.
- JA / NEIN
- AN / AUS
- WAHR / FALSCH
Dafür hat JavaScript einen booleschen Datentyp. Es kann nur die Werte true oder false annehmen.
Die Boolean()-Funktion
Man kann die Funktion Boolean()
verwenden, um herauszufinden, ob ein Ausdruck (oder eine Variable) wahr ist:
Boolean(10 > 9)
Es geht auch einfacher:
(10 > 9)
10 > 9
Aufgabe
Lasse den o.g. Wert ausgeben. Versuche mehrere andere Vergleichsoperatoren, um ein Gefühl für die Funktion zu bekommen
Vergleiche und Bedingungen
Boolesche Werte werden oft für Bedingungen verwendet.
Hier sind einige Beispiele:
Operator | Beschreibung | Beispiel |
---|---|---|
== | ist gleich | if (tag == „Montag“) |
> | größer als | if (bezahlung > 9000) |
< | kleiner als | if (alter < 18) |
Merke: Der boolesche Wert eines Ausdrucks ist die Grundlage für alle JavaScript-Vergleiche und -Bedingungen.
Alles mit einem Wert ist „wahr“
<!--
Folgende Aussagen bekommen den booleschen Wert "wahr"
-->
<p id="demo5"></p>
<script>
document.getElementById("demo").innerHTML =
"100 ist " + Boolean(100) + "<br>" +
"3.14 ist " + Boolean(3.14) + "<br>" +
"-15 ist " + Boolean(-15) + "<br>" +
"Irgendeine (nicht leere) Zeichenkette ist " + Boolean("Hallo") + "<br>" +
"Sogar der String 'false' ist " + Boolean('false') + "<br>" +
"Jede Aussage (außer null) ist " + Boolean(1 + 7 + 3.14);
</script>
Alles ohne Wert ist „falsch“
// Der boolesche Wert 0 ist falsch
let x = 0;
Boolean(x);
// Der boolesche Wert -0 ist falsch
let y = -0;
Boolean(y);
// Der boolesche Wert von "" (leeren Strings) ist falsch
let z = "";
Boolean(z);
// Der boolesche Wert von "undefined" ist falsch
let a;
Boolean(a);
// Der boolesche Wert von "null" ist falsch
let b = null;
Boolean(b);
// Der boolesche Wert von "false" ist falsch
let c = false;
Boolean(c);
// Der boolesche Wert von "NaN" (Not a Number) ist falsch
let d = 10 / "Hallo";
Boolean(d);
Aufgabe
Lasse die o.g. Werte ausgeben. Versuche mehrere andere Vergleichsoperatoren, um ein Gefühl für die booleschen Werte zu bekommen
Bedingte Anweisungen (if / else / else if)
Merke: Bedingte Anweisungen werden verwendet, um verschiedene Aktionen basierend auf verschiedenen Bedingungen auszuführen.
Sehr oft möchte man beim Schreiben von Code unterschiedliche Aktionen für unterschiedliche Entscheidungen ausführen.
Dazu kann man bedingte Anweisungen im Code verwenden. In JavaScript gibt es die folgenden bedingten Anweisungen:
- Man verwendet
if
, um einen Codeblock anzugeben, der ausgeführt werden soll, wenn eine bestimmte Bedingung wahr ist - Man verwendet
else
, um einen Codeblock anzugeben, der ausgeführt werden soll, wenn dieselbe Bedingung falsch ist - Man verwendet
else if
, um eine neue zu testende Bedingung anzugeben, wenn die erste Bedingung falsch ist - Man verwendet
switch
, um viele alternative Codeblöcke anzugeben, die ausgeführt werden sollen
Die if-Anweisung
Die if
-Anweisung wird verwendet, um einen JavaScript-Codeblock anzugeben, der ausgeführt werden soll, wenn eine Bedingung wahr ist.
// SYNTAX
if (Bedingung) {
// Block oder Code, der ausgeführt wird, wenn die Bedingung wahr ist
}
Merke:
if
wird kleingeschrieben. IF oder If wird einen Fehler produzieren
Beispiel
<p id="demo">Guten Abend!</p>
<script>
if (new Date().getHours() < 18) {
document.getElementById("demo").innerHTML = "Guten Tag!";
}
</script>
Aufgabe
Baue o.g. Script nach und probiere verschiedene Stundenwerte aus.
Die else-Anweisung
Man verwendet die else
-Anweisung, um einen Codeblock anzugeben, der ausgeführt werden soll, wenn die Bedingung falsch ist.
// SYNTAX
if (Bedingung) {
// Block oder Code, der ausgeführt wird, wenn die Bedingung wahr ist
} else {
// Block oder Code, der ausgeführt wird, wenn die Bedingung falsch ist
}
Beispiel
<p id="demo"></p>
<script>
const hour = new Date().getHours();
let gruss;
if (hour < 18) {
gruss = "Guten Tag";
} else {
gruss = "Guten Abend";
}
document.getElementById("demo").innerHTML = gruss;
</script>
Aufgabe
Baue o.g. Script nach und probiere verschiedene Antworten und Stundenwerte aus.
Die else if-Anweisung
Man verwendet die else if
-Anweisung, um eine neue Bedingung anzugeben, wenn die erste Bedingung falsch ist.
// SYNTAX
if (Bedingung1) {
// Block oder Code, der ausgeführt wird, wenn die 1. Bedingung wahr ist
} else if (Bedingung2) {
// Block oder Code, der ausgeführt wird, wenn die 1. Bedingung flasch ist und die 2. Bedingung wahr ist
} else {
// Block oder Code, der ausgeführt wird, wenn die 1. Bedingung und die 2. Bedingung falsch ist
}
Beispiel:
Wenn die Uhrzeit unter 10:00 Uhr liegt, erstellen Sie eine „Guten Morgen“-Begrüßung, wenn nicht, aber die Uhrzeit unter 20:00 Uhr liegt, erstellen Sie eine „Guten Tag“-Begrüßung, ansonsten einen „Guten Abend“:
<p id="demo"></p>
<script>
const time = new Date().getHours();
let gruss;
if (time < 10) {
gruss = "Guten Morgen";
} else if (time < 20) {
gruss = "Guten Tag";
} else {
gruss = "Guten Abend";
}
document.getElementById("demo").innerHTML = gruss;
</script>
Aufgabe
Baue o.g. Script nach und probiere verschiedene Antworten und Stundenwerte aus.
Übungsaufgaben
- Versuche o.g. Lektionen mit Arrays und Objekten zu kombinieren
- Schreibe z.B. eine if-else if-else Anweisung für Werte in einem Array, welche durch ein Event ausgelöst wird