ereignisse auf benutzereingaben...
TRANSCRIPT
Eberhart 2.js_events_mehrfachauswahl.docx 1
Ereignisse – Auf Benutzereingaben reagieren
Inhalt:
1) klassische Ereignisbehandlung: z.B. onclick
2)Die Methoden: getElementById und innerHTML
2a)innerHTML
2b) Beispiel: Mit einem Klick Inhalt ändern
2c)„Value“ auslesen aus einem Formular
2d)mit value den Wert lesen und Formular überprüfen
2e)Beispiel: Anzeige einer gewählten Option in einer Dropdownliste
2f)Mehrfachauswahl mit einem Listenfeld (Bsp. Programmiersprachen)
2g)Kontrollkästchen auslesen (Bsp. Pizzabestellung)
JavaScript ermöglicht es dem Entwickler auf Ereignisse (engl.: events) im Browser zu reagieren. Auf diese Weise kann der Benutzer mit den Anwendungen interagieren, über die einfachen Rückgabewerte der Funktion prompt() und confirm() hinaus.
Bei diesen Ereignissen kann es sich um den Klick auf einen Button, die Auswahl eines Eintrags aus einer Liste, ein Drehen des Gerätes, eine bestimmte Bewegung mit der Maus, das Absenden eines Formulars und vieles mehr handeln.
Damit das Programm auf ein Ereignis reagieren soll, muss man eine JavaScript-Funktion entwickeln. Diese enthält die Anweisungen, die im Falle des Ereignisses ausgeführt werden sollen. Dieser Mechanismus wird Eventhandler (Ereignis-Behandler) genannt. Mittels der unterschiedlichen Eventhandler reagiert der JavaScript-Interpreter auf verschiedenartige Ereignisse, die der Eventhandler-Mechanismus über festgelegte Namen identifiziert.
Ein Eventhandler ist ein Element zur Ereignisbehandlung. Eventhandler stellen damit eine Verbindung zwischen dem HTML-Element, bei dem das Ereignis ausgelöst wird, dem Ereignis selbst und der JavaScript-Funktion her.
Neben Klicken gibt es eine ganze Reihe weiterer Standardevents in JavaScript.
Mausereignisse:
click: einfacher Mausklick
dbclick: doppelter Mausklick
mouseover: Mauszeigerbewegung über einem Element
keypress: eine Taste auf der Tastatur wird gedrückt
Tastaturereignisse:
keyup Der Benutzer lässt eine Taste los.
Eberhart 2.js_events_mehrfachauswahl.docx 2
Formularereignisse:
submit Der Benutzer schickt ein Formular ab
input der Wert eines <input>-Elements hat sich geändert
Überblick über Techniken der Ereignisbehandlung:
1) Die älteste Technik ist die Klassische Ereignisbehandlung. Dabei werden Eventhandler innerhalb von HTML-Elementen angeordnet. Typische Beispiele sind „onclick“ und „onload“.
2) Event Listener: Bei der Neuentwicklung eines Programms sollte man damit arbeiten! Diese Listener (engl.: to listen = zuhören, horchen) horchen in den Anwendungen auf Ereignisse und sorgen für die Funktionsaufrufe.
1) klassische Ereignisbehandlung:
Eventhandler sind das wichtigste Bindeglied zwischen HTML und JavaScript. Ein Eventhandler-Ereignis sieht aus wie jedes gewöhnliche HTML-Attribut.
Eventhandler sind in JavaScript Eigenschaften eines Objekts.
Gemeinhin beginnen die Namen von Ereignissen mit der Silbe on, gefolgt von einer sprechenden Beschreibung des Ereignisses. Beispiele: onmouseover, onload, onclick
Ein Beispiel für den Aufruf einer Funktion mit einem HTML-Eventhandler onclick="meineFunktion()"
1a)onclick in einem Link
Grundsätzlich gilt Folgendes: Ein Event-Handler beginnt stets mit on. Der Event-Handler, der zuständig ist, wenn auf einen Link geklickt wird, heißt onClick. Wenn folgender Link angeklickt wird, wird ein modales Fenster geöffnet:
<a href="irgendwohin.html" onClick="alert('Bitte Eingabe durchführen!')">Text</a>
Vom Prinzip her wunderbar – Browser, die JavaScript unterstützen, führen den Code aus, folgen danach aber dem Link. Das href-Attribut des Links muss gesetzt werden, sonst wird er nicht angezeigt. Wenn kein Link aufgerufen werden soll, gibt es eine Möglichkeit, einen Link anzugeben, der keine neue Seite lädt:
<a href="#" onClick="alert(' Bitte Eingabe durchführen!')">Text</a>
Eberhart 2.js_events_mehrfachauswahl.docx 3
Beispiel:
Hier führt der Link auf eine neue einfache Seite „4.onclicktest.html“, nur um die Funktionsweise zu zeigen. Diese enthält nur eine <h1> Überschrift.
Zuerst muss auf den Link geklickt werden
Dann erscheint das Alert-Fenster. Nach dessen Bestätigung erscheint die angegebene Seite.
1b)Onclick mit einem Button Funktion mit onClick: mit dem onClick-Ereignis auf den Button wird eine Funktion gestartet. Beispiel: erstelle „2.js_onclick.html“
Eberhart 2.js_events_mehrfachauswahl.docx 4
Ergebnis:
2)Die Methoden: getElementById und innerHTML
Info: Mit HTML-IDs kann man ein Element eindeutig identifizieren. Das wird auch in Bezug
auf CSS so gehandhabt. Nun auch JavaScript.
Beispiel: <p id=“aktion“>….</p>
Der Zugriff auf diese ID kann in JavaScript folgendermaßen erfolgen:
getElementById übernimmt eine ID und gibt das dazugehörige Element zurück
innerHTML ist eine wichtige Eigenschaft, mit der man den Inhalt eines Elements
lesen und ersetzen kann. Der „innere“ Wert des Elements wird hier sichtbar gemacht.
Zum Ändern eines Wertes, schreibt man nach dem Element das „innerHTML“ und
dann den String für den neuen Inhalt:
Beispiel:
aktion.innerHTML = "Jetzt ist das neu";
Der Zugriff erfolgt mit Hilfe der DOM-Methode „getElementById()“. Damit bekommt man
ein Elementobjekt zurück, über das man dessen Inhalt und Attribute
lesen,
verändern und
ersetzen kann.
„getElementById()“ ist die häufigste Methode im HTML-DOM, um Manipulationen
durchzuführen oder Informationen vom Element zu erhalten.
Hier erhält <p> die eindeutige ID
„aktion“. In dieser Seite darf es keine
anderen Elemente mit der gleichen ID
geben.
Eberhart 2.js_events_mehrfachauswahl.docx 5
2.1)innerHTML
JavaScript kann auf alle Elemente einer Website zugreifen.
Am einfachsten geht das, wenn das gewünschte HTML-Element eine ID in Form eines
Attributs bekommt:
Beispiel: Erstelle die Datei „2.js_innerhtml.html“:
Die „id“ ist das Element, über das JavaScript am einfachsten auf die Webseite zugreifen und
die Inhalte eines Tags verändern kann. Zum Beispiel um den enthaltenen Text auszulesen
oder ihn zu verändern.
Beim Öffnen der Seite wird JavaScript sofort ausgeführt und der bestehende Text wird sofort
überschrieben.
Ergebnis:
Eberhart 2.js_events_mehrfachauswahl.docx 6
Übung: Erstelle eine Prompt-Anweisung, in die der User einen eigenen Text eingeben kann:
Ziel:
Code:
Info:
Verbesserung des Skriptes:
Der Änderung des Codes ist NICHT zu erkennen, da sie sofort ausgeführt wird.
Besser: Der Text wird erst geändert, wenn man auf einen Button klickt.
notiz.innerHTML ist so etwas wie die Kurzform von:
„document.getElementById(“notiz“).innerHTML
Damit greift man innerhalb des Dokuments „document“ (also der Webseite) auf das
Element mit der Id „notiz“ zu. Genauer gesagt auf das, was sich innerhalb des Tags
befindet, innerHTML.
Eberhart 2.js_events_mehrfachauswahl.docx 7
2b) Beispiel: Mit einem Klick Inhalt ändern
Erstelle folgende Datei „2.js_getelement.html“.
In Zeile 11 wird der Onclick-Event mittels eines Buttons ausgelöst. Dieser verwendet
die Funktion, die in Zeile 15 steht.
Vorher wird die Variable „aktion“ erstellt, die mit „getElementById“ den Inhalt der ID
in Zeile 9 ausliest.
In der Funktion wird dieser Inhalt mit einem neuen Inhalt überschrieben. Dazu wird
die Methode „innerHTML“ verwendet.
Ergebnis:
2c)„Value“ auslesen aus einem Formular:
Textfelder besitzen wie alle Eingabefelder eine Eigenschaft namens „value“, über die auf
deren Wert zugegriffen werden kann. Dabei kann man mit diesem Wert wie mit einer
normalen String-Variablen arbeiten. Man kann aber auch Werte in diese Eigenschaft
schreiben, um den Inhalt des Textfeldes zu aktualisieren.
Textfelder enthalten immer String-Werte und geben auch nur solche zurück. In dieser
Hinsicht ähneln sie „prompt-Anweisungen“. Wenn ein Textfeld einen nummerischen Wert
Eberhart 2.js_events_mehrfachauswahl.docx 8
zurückgeben soll, muss man sie es erst mit „parseInt()“ oder „parseFloat()“ in Ganz- oder
Gleitpunktzahlen umwandeln.
Beispiel:
Erstelle „2.js_getelement.value.html“.
Beginne mit der Erstellung von einem Formular, das zwei Inputfelder enthält. Diese haben
fixe Werte „value“, nämlich „Herr“ und „Huber“. Später, mit Speichern in eine Datenbank,
würde man hier Werte finden, die der Kunde eingeben würde.
<form> <label for="anrede" >Anrede</label> <input type="text" name="anrede" value="Herr" id="anrede"> <br> <br> <label for="familienname" >Familienname</label> <input type="text" value="Huber" id="familienname"> </form>
Darunter erstelle einen <script>-Bereich, in dem diese beiden fixen Werte in Variablen übergeben werden. Die Zuordnung erfolgt mittels der ID der Felder:
var anr = document.getElementById("anrede").value; var fam = document.getElementById("familienname").value;
Diese Werte werden in eine neue Variable „ergebnis“ gespeichert und dann ausgegeben:
Eberhart 2.js_events_mehrfachauswahl.docx 9
Code:
Ergebnis:
Ergebnis:
Eberhart 2.js_events_mehrfachauswahl.docx 10
Beachte:
Die Erstellung der Variablen im <script> Bereich kann hier nicht im <head> erfolgen, da dann
die Elemente aus dem <body> noch nicht vorhanden wären. Daher muss dieser Teil danach
geschrieben sein.
Sonst wäre das Ergebnis folgendes:
2d)mit value den Wert lesen und Formular überprüfen
Verwende das Formular weiter und überprüfe den Namen. Wenn er kleiner als 3 Buchstaben
ist, soll eine Warnmeldung ausgegeben werden.
Speicher die neue Datei als „2.js_getelement.formular.html“.
var fam = document.getElementById("familienname"); function checkUser() { if (fam.value.length < 3) { document.write("Der Name muss mindestens 3 Zeichen haben"); } else { document.write("Willkommen"); } };
ABER nicht vergessen: den Namen der Funktion im Button ändern:
Eberhart 2.js_events_mehrfachauswahl.docx 11
Ergebnis: wenn ok wenn nicht ok:
Eberhart 2.js_events_mehrfachauswahl.docx 12
2e)Beispiel: Anzeige einer gewählten Option in einer Dropdownliste
Ereignis mit „onclick“ und „getElementById“ und „Objektzugriff“.
Hier hat die Option keinen „value“. Hier wird das Ergebnis mit „innerHTML“ ermittelt.
Ergebnis:
Ein Select-Objekt, auf das im Code verwiesen wird, sollte ein id-Feld haben.
Das andere Element in diesem Formular ist eine Schaltfläche. Wenn man darauf geklickt hat, wird die Funktion „getOption()“ gestartet.
Zeile 7 wird in den Bereich geschrieben, der mit dem Wert (demo) verknüpft ist und das ist die Zeile 25 mit id=“demo“.
Erstelle das File „2.js_event_dropdown1.html“:
Eberhart 2.js_events_mehrfachauswahl.docx 13
Code: <!DOCTYPE html> <html> <head> <script> function getOption() { var obj = document.getElementById("mySelect"); document.getElementById("demo").innerHTML = obj.options[obj.selectedIndex].text; } </script> </head> <body> <form> Select your favorite fruit: <select id="mySelect"> <option>Apple</option> <option>Orange</option> <option>Pineapple</option> <option>Banana</option> </select> <br><br> <input type="button" onclick="getOption()" value="Click Me!"> </form> <p id="demo"></p> </body> </html>
Eberhart 2.js_events_mehrfachauswahl.docx 14
2f)Mehrfachauswahl mit einem Listenfeld (Bsp. Programmiersprachen)
Auch hier wird das select-Objekt verwendet. Das Standardverhalten einer Drop-Down-Liste
ist nicht sinnvoll anwendbar, wenn mehrere Auswahlkriterien zulässig sind, da der User alle
Optionen auf einmal sehen muss.
Erstelle das File „2.js_event_mehrfachauswahl.html“.
Das select-Objekt benötigt eine ID, damit man es in JavaScript auslesen kann.
Das Attribut multiple=“multiple“ weist den Browser an, mehrere Eigenschaften zu
akzeptieren, für die sich ein Benutzer entschieden hat.
Größe mit size angeben: dieser Parameter gibt die Anzahl der anzuzeigenden Zeilen
an und sorgt dafür, dass alle Elemente der Liste angezeigt werden.
Das „output-div“ bietet den Platz, wo die Antwort angezeigt wird.
Eberhart 2.js_events_mehrfachauswahl.docx 15
Code: <html> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>Merhfachauswahl</h1> <form> <fieldset> <label>Diese Sprachen kenne ich. Markiere mit gedrückter STRG-Taste mehrere Elemente <br><br></label> <select id="spracheAuswaehlen" multiple ="multiple" size="5"> <option value="HTML">HTML</option> <option value="CSS"> CSS</option> <option value="PHP"> PHP</option> <option value="JavaScript">JavaScript</option> <option value="Python">Python</option> </select> <button type="button" onclick="auswahlAnzeigen()">übernehmen</button> </fieldset> </form> <div id="output"></div> </body> </html>
Nun folgt der JavaScript Code: Eigentlich ist eine Liste mit option-Objekten in einem select-Objekt eine Art Array.
Die Variable repräsentiert das gesamte select-Objekt: var spracheAuswaehlen = document.getElementById("spracheAuswaehlen");
Für eine komplexe HTML_Ausgabe ist es einfacher mit einer String-Variablen zu arbeiten, als direkt auf die Elemente Code zu schreiben: var ergebnis = "<h2>Deine Sprache: </h2>";
Eine unsortierte Liste, die die Ergebnisse anzeigt ergebnis += "<ul> \n";
Die for-Schleife durchläuft das Listenfeld. spracheAuswaehlen besitzt wie ein Array eine Eigenschaft „length“. for (i=0; i < spracheAuswaehlen.length; i++){
Die Variable „aktuelleAusgabe“ ist eine temporäre Variable, die beim Abarbeiten der Schleife alle Verweise auf die einzelnen option-Elemente im ursprünglichen select-Objekt aufnimmt: aktuelleAuswahl = spracheAuswaehlen[i];
Eberhart 2.js_events_mehrfachauswahl.docx 16
Überprüfe ob das aktuelle Element ausgewählt wurde: die „aktuelleAuswahl“ ist ein Objekt, das eine Eigenschaft „selected“ besitzt. Diese Eigenschaft sagt, ob das Objekt vom Benutzer markiert worden ist. „selected“ ist eine Boolsche Eigenschaft, wodurch die einzelnen zulässigen Werte „true“ oder „false“ sind. if (aktuelleAuswahl.selected == true){
Wenn das Element markiert wurde, wird in der unsortierten Liste, die in der Variable „ergebnis“ zuhause ist, ein Eintrag angelegt. ergebnis += " <li>" + aktuelleAuswahl.value + "</li> \n";
Das Attribut „innerHTML“ von „output“ bietet sich für die Ausgabe der unsortierten Liste an: output = document.getElementById("output"); output.innerHTML = ergebnis;
Die Optionen eines Auswahlfeldes verhalten sich hier wie ein Array.
Code: <script> function auswahlAnzeigen(){ //Daten empfangen var spracheAuswaehlen = document.getElementById("spracheAuswaehlen"); //String für die Ausgabe erstellen
Eberhart 2.js_events_mehrfachauswahl.docx 17
var ergebnis = "<h2>Deine Sprache: </h2>"; ergebnis += "<ul> \n"; //die Optionen durchlaufen for (i=0; i < spracheAuswaehlen.length; i++){ //die aktuelle Auswahl untersuchen aktuelleAuswahl = spracheAuswaehlen[i]; //falls markiert, drucken if (aktuelleAuswahl.selected == true){ ergebnis += " <li>" + aktuelleAuswahl.value + "</li> \n"; } //ende if } //ende for-schleife //die liste abschließen und ausgeben ergebnis += "</ul> \n"; output = document.getElementById("output"); output.innerHTML = ergebnis; } //ende auswaehlenAnzeigen </script>
Eberhart 2.js_events_mehrfachauswahl.docx 18
2g)Kontrollkästchen auslesen (Bsp. Pizzabestellung)
Kontrollkästchen erfüllen eine nützliche Dateneingabe-Funktion: sie machen immer dann Sinn, wenn es um Boole´sche Daten geht. Wenn einige Werte wahr oder falsch sein können, sind Kontrollkästchen praktisch. Es können beliebig viele Kontrollkästchen aktiviert werden.
Kontrollkästchen sind voneinander unabhängig obwohl sie häufig gruppiert sind. Auf die Nachbarkästchen hat das keinen Einfluss.
Erstelle die Datei „2.js_event_kontrollkasten.html“.
Hier ist nur zuerst das Formular erstellt worden. Zur Beschriftung der Checkboxen ist hier ein <label> verwendet worden.
Eberhart 2.js_events_mehrfachauswahl.docx 19
Zusätzlich ist darin das „for-Attribut“ verwendet worden. Es ist nicht notwendig, aber es bindet das Label an ein Kontrollkästchen und unterstützt den Nutzer: er kann nämlich auch auf die Bezeichnung klicken, nicht nur in das Kontrollkästchen, um das Kästchen zu aktivieren. Info zu Kontrollkästchen:
id: wird hier extra anders gewählt als der value, damit man es besser unterscheiden kann.
value: diese Eigenschaft kann dazu verwendet werden, um zum Kontrollkästchen gehörende Werte aufzunehmen
checked: bei dieser Eigenschaft handelt es sich um einen Boole´schen Wert, der angibt, ob das Kontrollkästchen aktiviert worden ist oder nicht.
Nun folgt der Code für die Funktion „bestellung()“
Die Eigenschaft „checked“ ermittelt, ob ein Haken gesetzt wurde oder nicht.
Wenn es aktiviert wurde, gib den Inhalt der Eigenschaft „value“ zurück, der zu dem entsprechenden Kontrollkästchen gehört.
Das heißt: es dient zur Verlängerung einer Zeichenkette. Siehe auch: https://www.w3schools.com/js/js_operators.asp
Code eines Teils, damit man nicht so viel selbst schreiben muss: <script> function bestellung(){ var pfefferoni = document.getElementById("pfeff"); //value </script> if (pfefferoni.checked){ result += "<li>" + pfefferoni.value + "</li> \n"; } //ende if
Eberhart 2.js_events_mehrfachauswahl.docx 20
Ergebnis:
Eberhart 2.js_events_mehrfachauswahl.docx 21
Info: Verwendung von Entwicklertools: CONSOLE Problem, dass nur Pfefferoni angezeigt werden. Lösung mittels „console“ zeigt warum: Zwiebel falsch geschrieben:
Quellen:
https://www.w3schools.com/js/js_objects.asp