studyklar
IProg · Klausur 3 · Aufgabe 3

Formular mit JavaScript prüfen

Ein Formular, das leere Felder meldet, bevor es abgeschickt wird: Diese Aufgabe fragt, wie die vorgegebene Funktion das macht, was daran schwach ist und wie es besser geht. Rechts steht erst die Seite aus der Klausur, ab Teil c die bessere Fassung. Mit Weiter geht es Schritt für Schritt voran.

Die Aufgabe

3) JavaScript (12 Punkte)

a) Erläutern Sie die Wirkung der JavaScript Funktion fun im folgenden Ausschnitt:

<head>  <title>Test</title>  <script type="text/javascript">    function fun (b) {      var f=b.parentNode.parentNode;      var error='';      error += (f.t1.value=='')?'\nt1':'';      error += (f.t2.value=='')?'\nt2':'';      if (error != '') {        alert('Bitte eingeben:'+error);      } else {        f.submit();      }    }  </script></head> <body>  <form action="ip_alles_ok.html">   <p>t1: <input type="text" name="t1" /></p>   <p>t2: <input type="text" name="t2" /></p>   <p><input type="button" value="ok" onclick="fun(this)" /></p>  </form></body>

b) Welche Schwächen weist diese Art der Verwendung von JavaScript auf?

c) Geben Sie eine bessere Lösung an

Die Seite hat ein Formular mit zwei Textfeldern t1 und t2 und einem Knopf „ok“. Ein Klick ruft die Funktion fun auf.

Gesucht sind drei Antworten in Stichworten: (a) was fun bewirkt, (b) welche Schwächen dieser Aufbau hat, (c) eine bessere Lösung als Code.

Merke: Bei jeder Seite mit JavaScript lohnt die Frage: Was passiert, wenn JavaScript im Browser ausgeschaltet ist?

Hinweis zur Musterlösung: Ihre bessere Lösung in Teil c weicht an einer Stelle von diesem Artefakt ab; mehr dazu in Schritt 11.

  1. Teil a: den Code Zeile für Zeile lesen, vom Klick bis zum Absenden.
  2. Teil b: die Seite mit den Augen eines Nutzers und eines Entwicklers prüfen.
  3. Teil c: die Schwächen aus b eine nach der anderen beheben.

Der Auslöser: ein Klick auf ok

   <p><input type="button" value="ok" onclick="fun(this)" /></p>

Der Knopf hat type="button". So ein Knopf schickt das Formular nicht selbst ab; er tut nur, was in onclick steht. Hier ruft er fun(this) auf.

this ist in einem onclick das Element, das geklickt wurde: der Knopf selbst. Die Funktion bekommt ihn als Parameter b.

Vom Knopf zum Formular

AusdruckElement
bder Knopf ok (Zeile 22)
b.parentNodedas p um den Knopf (Zeile 22)
b.parentNode.parentNodedas form (Zeile 19)

Die Seite ist ein Baum aus Elementen (DOM, Document Object Model). parentNode ist der Elternknoten, also das Element, das ein Element umschließt.

Der Knopf steckt in einem <p>, das <p> im <form>. Zweimal parentNode führt darum vom Knopf zum Formular. Es steht danach in f.

Aus Skript 02, Folie 9: node.parentNode gibt den Elternknoten von node zurück.
Noch 10 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Abbildung 1

<head>  <title>Test</title>  <script type="text/javascript">    function fun (b) {      var f=b.parentNode.parentNode;      var error='';      error += (f.t1.value=='')?'\nt1':'';      error += (f.t2.value=='')?'\nt2':'';      if (error != '') {        alert('Bitte eingeben:'+error);      } else {        f.submit();      }    }  </script></head> <body>  <form action="ip_alles_ok.html">   <p>t1: <input type="text" name="t1" /></p>   <p>t2: <input type="text" name="t2" /></p>   <p><input type="button" value="ok" onclick="fun(this)" /></p>  </form></body>
LegendeDie Seite aus der Klausur: Funktion fun im Kopf, Formular mit zwei Feldern und Knopf.