Fork me on GitHub

Web Development

Ein Lehrbuch für das Informatik oder Medien-Informatik Studium.

Zeile zu einem Formular hinzufügen

Ohne Javascript sind Web Formulare statisch. Um Eingabelemente hinzuzufügen oder zu löschen braucht man Javascript.

In diesem Beispiel verwenden wir Javascript, um ein Pizza-Bestellformular zu verändern.

Die wichtigsten DOM-Befehle für dieses Beispiel sind cloneNode() und insertBefore(). Mit cloneNode können wir die Kopie eines einzelnen DOM-Knoten oder eines ganzen DOM-Baums erstellen. Dieser Klon ist zuerst einmal nicht Teil des Originaldokuments. Man muss ihn erst wieder einfügen:

let p = document.querySelector("div.pizza");
let new_pizza = p.cloneNode(true);

Eingabeelemente zu clonen ist nicht trivial: jedes Eingabeelement benötigt einen eindeutigen Namen. Es wäre eine Menge Arbeit, um neue Namen für neue Eingabeelemente zu erzeugen. In diesem Beispiel vermeinden wird das mit Hilfe von PHP: PHP kann GET-Parameter als Array behandeln: Wenn wir das Eingabe-Element size nennen, ist sein Wert in in PHP als $_GET['size'] erhältlich und zwar als String. Wenn wir mehrere Eingabeelemente mit dem namen size[] versehen (mit eckigen Klammern als Teil des Namen), sind die Werte all dieser Felder wieder als $_GET['size'] erhältlich, und zwar als Array.

Deswegen sieht eine Zeile des Pizza-Bestellformulars so aus:

<div class="pizza">
  <span class="removethis">x</span>
  <select name="pizzatype[]">
    <option selected="selected">Magaritha</option>
    <option>Vegetarian</option>
    <option>Quattro Staggione</option>
  </select>
  <br>
  <label>add Garlic 
    <select name="addgarlic[]">
      <option selected="selected">no</option>
      <option>yes</option>
    </select>
  </label>
  <label>add Cheese 
    <select name="addcheese[]">
      <option selected="selected">no</option>
      <option>yes</option>
    </select>
  </label>
  <br>
  <label>anything else? 
    <input name="comment[]" type="text">
  </label>
</div>

Fertiges Formular Demo