Für Übungen nutzen wir die folgende CodeSandbox als Startpunkt:
https://codesandbox.io/s/82lki
Die Übungen bauen immer aufeinander auf. Aber keine Angst! Für den Fall, dass bei einer Übung etwas nicht klappt, gibts bei jeder Übung einen Link zur CodeSandbox mit dem aktuellen Stand.
- Was ist HTML?
- Aufbau einer HTML-Datei
- Der Browser & Standards
- IDs & Klassen
- Block- & Inline-Elemente
- Neue Elemente
Formulare werden genutzt, um Daten oder auch Dateien zu übermitteln.
Die Datenverarbeitung passiert anschliessend auf dem Server mit einer serverseitigen Programmiersprache wie PHP, Python, JavaScript etc.
- Das
<form>
-Element ist der Container in dem die Eingabefelder platziert werden können - Die
action
definiert, an welche URL das Formular verschickt wird method
definiert die verwendete Methode:GET
(verwendbar für “nicht sichere” Daten)POST
(immer verwendbar)
- Mit einem
<button>
vontype="submit"
kann das Formular abgeschickt und die Daten anschliessend übermittelt werden
Beispiel
<form action="./save-data.php" method="POST">
<label for="vorname">Vorname *</label>
<input type="text" name="vorname" id="vorname" value="">
<button type="submit">Senden</button>
</form>
Demo 🤯
- Das
<label>
wird genutzt, um ein Eingabefeld zu benennen. - Die Verknüpfung von einem Label und einem Eingabefeld geschieht über das
for
-Attribut. Dieses muss den gleichen Wert wie dasid
-Attribut des Eingabefeldes besitzen - Eine Verknüpfung kann auch erzielt werden, indem das Eingabefeld innerhalb des
<label>
-Elementes platziert wird. Somit ist dasfor
-Attribut obsolet - Beim Klick auf das Label wird das Eingabefeld fokussiert
Beispiel
<label for="vorname">Vorname</label>
<input type="text" name="vorname" id="vorname" value="">�
<!-- Ohne for Attribut -->
<label>
Vorname
<input type="text" name="vorname" value="">
</label>
Das <input>
-Element ist das meistgenutzte Eingabefeld.
Spezielle Attribute für Formularfelder:
name
: Unter demname
wird das Formular an den Server übermittelttype
: Definiert, um was für ein Inputfeld es sich handelttext
: Default type und passend für Texteingabennumber
: Ermöglicht nur Zahleneingabenemail
: Validiert auf eine E-Mail-Adressedate
: Zeigt einen Datepicker an und formatiert die Value in einem bestimmten Formatradio
:checkbox
:- etc ...
- Per
value
-Attribut kann das Inputfeld vorabgefüllt werden - Per
placeholder
-Attribut kann ein temporärer Wert angezeigt werden, solange das Inputfeld leer ist - Mit dem
required
-Attribut, kann ein Feld als Pflichtfeld gekennzeichnet werden. Das Formular kann anschliessend nicht mehr verschickt werden, solange dieses Feld nicht ausgefüllt ist
Beispiel
<input type="text" name="vorname" value="Vorausgefüllte Daten">
<input type="text" name="vorname" value="" required placeholder="Angezeigt wenn leer">
<input type="text" name="namea" value="">
<input type="email" name="nameb" value="">
<input type="number" name="namec" value="">
<input type="date" name="named" value="">
<input type="radio" name="namee" value="">
<input type="checkbox" name="namef" value="">
<!-- usw. -->
type="checkbox"
ermöglicht Checkboxen- Die Value einer Checkbox wird nur übermittelt, wenn die Checkbox
checked
ist - Kann per
checked
-Attribut vorausgefüllt werden
Beispiele
<input type="checkbox" name="foo" value="bar" id="example">
<label for="example">Checkbox</label>
type="radio"
ermöglicht Radiofelder- Ermöglicht, dass von mehreren Optionen nur eine ausgewählt werden kann
- Nur die Value des Radiofeldes, welches beim Senden ausgewählt ist, wird an den Server übermittelt
- Radiofelder, die eine Gruppe bilden, müssen das gleiche
name
-Attribut besitzen
Beispiele
<input type="radio" name="foo" value="radio1" id="radio1">
<label for="radio1">Radiofeld 1</label>
<input type="radio" name="foo" value="radio2" id="radio2">
<label for="radio2">Radiofeld 2</label>
- Ein Select-Element enthält eine oder mehrere Optionen
- Eine Option kann mit dem
selected
-Attribut vorausgewählt werden, ansonsten ist die erste Option per default gewählt
Beispiele
<select name="sex">
<option value="">Bitte wählen</option>
<option value="woman" selected>Frau</option>
<option value="man">Mann</option>
</select>
Textareas eignen sich für grössere Fliesstexte, wie eine Beschreibung oder eine Mitteilung bei einem Kontaktformular.
- Höhe und Breite kann entweder mit
cols="x"
undrows="y"
, oder per CSS gesetzt werden - Textareas sind keine Void-Elements und der Inhalt wird zwischen Anfangs- und Schluss-Tag geschrieben
Beispiele
<textarea name="name" id="my-textarea" cols="30" rows="10">Vorausgefüllter Inhalt</textarea>
type
definiert die Funktion des Buttons- Vorhandene
type
-Values:submit
: Verschickt das Formularreset
: Setzt alle Eingabefelder innerhalb eines Formulars zurückbutton
: Ist generisch, und hat an sich keine spezielle Funktion (wird oft in Verbindung mit JavaScript genutzt)
- Default
type
innerhalb eines<form>
-Elements istsubmit
- Default
type
ausserhalb eines<form>
-Elements ist ebenfallssubmit
(macht dann aber nichts) - Es ist good practice immer einen
type
anzugeben, auch wenn dieser implizit ist
Beispiele
<button type="submit">Senden</button>
<button type="reset">Zurücksetzen</button>
<button type="button">Trigger etwas mit JavaScript</button>
Mehr zu Formularen/Eingabefeldern und deren Funktionen unter:
Öffne diese CodeSandbox als Startpunkt.
- Fügt das JavaScript von der Startsandbox bei euch ein (falls eine eigene Codesandbox verwendet wird).
Wer das JavaScript selber schreiben will, kann einen EventListener auf das submit-Event setzen und der handler sollte alle values in einem alert anzeigen. - Erstelle ein Formular mit vier Feldern
- Ein Titelfeld. Vergib dem Feld die
id="title"
- Eine Textarea für die Beschreibung. Vergib dem Feld die
id="description"
- Ein Selectfeld mit 5 Optionen, um die Wichtigkeit zu setzen (1-5). Vergib dem Feld die
id="importance"
- Ein Datumsfeld, damit wir ein Duedate setzen können. Vergib dem Feld die
id="duedate"
- Ein Titelfeld. Vergib dem Feld die
- Vergib dem Formular die
id="form"
- Füge noch einen Submitbutton hinzu und schaue was passiert, wenn Du das Formular abschickst
Zeit: ~ 15 min
Solution: https://codesandbox.io/s/bnydy