http://jendryschik.de

UX, Usability und Webstandards

Suche
SucheMenü

Formulare

Hinweis: Diese »Einführung in XHTML, CSS und Webdesign« ent­spricht der zwei­ten Auf­lage des gleich­na­mi­gen Buches, das im Dezem­ber 2008 im Ver­lag Addison-Wesley erschie­nen ist. Die Inhalte sind mittlerweile veraltet, fast alles hat sich weiterentwickelt. Seit einigen Jahren gibt es HTML5, von XHTML redet niemand mehr, und auch die Entwicklung und Unterstützung von CSS ist um Einiges weiter. Auch fast alle Grundlagentexte müsste man schon lange fortschreiben. Falls Sie die Texte dennoch lesen möchten, behalten Sie das bitte im Hinterkopf.

Zurück zur Startseite und zum Inhaltsverzeichnis des Buchs

Ein Formular ist ein standardisiertes Mittel zur Erfassung von Daten. Formulare vereinfachen die Erhebung von (Massen-)Daten, sorgen für Vollständigkeit sowie Datenintegrität und schützen vor Mehrdeutigkeiten, die bei freier Wortwahl oder einem formlosen Antrag auftreten können.

Ein XHTML-Formular ist ein Abschnitt eines Dokuments, der neben gewöhnlichem Inhalt spezielle Steuerelemente – beispielsweise Optionsfelder, Schaltflächen, (Mehrfach-)Auswahllisten oder Kontrollkästchen – und deren Beschriftungen enthält.

Auch wenn Zugänglichkeit und Gebrauchstauglichkeit wichtige Teile der Webentwicklung sind (gerade bei Formularen, bei denen es darauf ankommt, dass sie verständlich, übersichtlich und auch per Tastatur vollständig bedienbar sind), wird in dieser Einführung nur auf die technischen Grundlagen eingegangen. Web-ergonomische Forderungen, Eingabehilfen, programmatische Verarbeitungsabläufe und Fehlerbehandlung würden den Rahmen dieser Einführung sprengen. Stattdessen empfehle ich die Lektüre der Artikel [Caspers 2007] und [Hellbusch].

Formulare sind ein Instrument der Mensch-Maschine-Interaktion, das heißt eine Schnittstelle zwischen einem Nutzer, der das Formular ausfüllt, und einem Programm oder Script, das die Angaben entgegennimmt und auswertet oder verarbeitet. Benutzer füllen ein Formular im Allgemeinen durch die Bedienung seiner Steuerelemente aus und senden es anschließend ab, zum Beispiel zu einem Webserver oder einem Mailserver. Im Web häufig anzutreffende Formulartypen sind Anmelde-, Bestell-, Kontakt- oder Suchformulare.

Das Auslesen und Verarbeiten der Formulardaten kann XHTML allein jedoch nicht leisten. Hier kommen server- und clientseitige Programmier- oder Skriptsprachen zum Einsatz.

Zum Seitenanfang

Formularcontainer: Der Elementtyp form

Das Element form ist ein Container für Steuerelemente. Alles, was zwischen Start- und End-Tag steht, gehört zum Formular. In strikten Dokumenten darf das form-Element nur Blockelemente als Kinder enthalten.

form-Elemente verfügen üblicherweise über die Attribute action, method und enctype.

Das Attribut action gibt in Form eines URI an, wohin die Formulardaten geschickt werden sollen, wenn das Formular abgesendet wird.

Das Attribut method gibt die HTTP-Methode zur Übertragung der Formulardaten an. Die Methode get ist die Standardeinstellung und legt fest, dass die Daten als Parameter an die im Attribut action angegebene Adresse angehängt werden. Bei der Methode post werden die Daten über den sogenannten Standardeingabekanal zur Verfügung gestellt.

Die W3C-Empfehlungen legen nahe, post immer dann zu verwenden, wenn das auswertende Programm »Nebeneffekte« verursacht, die Daten also über das auswertende Programm hinaus weiterverwendet werden. Dies ist zum Beispiel dann der Fall, wenn eine Datenbank verändert werden soll. Wird das Formular lediglich zum Informationsabruf verwendet, beispielsweise bei einer Suchabfrage, reicht get aus.

Das Attribut enctype gibt den MIME-Typ für die Übertragung des Formulars zum Server an, sofern als Übertragungsmethode post gewählt ist. Der Standardwert ist application/x-www-form-urlencoded; ermöglicht das Formular Dateiuploads, sollte multipart/form-data verwendet werden.

<form action="http://www.example.org/kontakt">
  <!-- Auszeichnungs- und Steuerelemente -->
</form>

<form action="http://www.example.org/bildupload"
  method="post" enctype="multipart/form-data">
  <!-- Auszeichnungs- und Steuerelemente -->
</form>

Zum Seitenanfang

Steuerelemente

Ein Formular besteht aus speziellen Elementen, genannt Steuerelemente, die eine Interaktion eines Nutzers mit einer Webseite über einfache Hyperlinks hinaus ermöglichen. Jedes Steuerelement hat einen über das Attribut name definierten Namen und einen Anfangswert, der seitens des Nutzers oder durch ein Script verändert werden kann. Wird ein Formular abgesendet, fassen einige Steuerelemente ihre Namen mit den aktuellen Werten zu einem Paar zusammen. Diese Paare werden mit dem HTTP-Request übertragen.

Der Elementtyp input

Das leere Element input definiert unterschiedliche Steuerelemente. Das Attribut type entscheidet, um welche Art von Steuerelement es sich konkret handelt.

Unter anderem folgende Werte kann das Attribut type annehmen:

Texteingabefeld: type="text"

Erzeugt ein einzeiliges Texteingabefeld.

<input type="text" name="text" />

Das Attribut size gibt dem Browser die Anfangsbreite des Texteingabefelds an. Der Wert bezieht sich auf die Anzahl der Zeichen. Das Attribut maxlength begrenzt die Zahl der Zeichen, die ein Nutzer eingeben kann. Eine derartige Einschränkung kann beispielsweise bei der Erfassung deutscher Postleitzahlen sinnvoll sein oder zur Eingrenzung auf einen festgelegten Wertebereich. size und maxlength können ungleich sein.

<input type="text" name="plz" size="5" maxlength="5" />


Abb. 5.24: Texteingabefeld mit Vorbelegung

Oftmals ist es eine gute Idee, Formularfelder mit bestimmten Werten vorzubelegen. Das kann hinsichtlich der Gebrauchstauglichkeit das Mittel der Wahl sein, um das Ausfüllen des Formulars zu vereinfachen. Das Attribut value weist einem Steuerelement einen Anfangswert zu. Bei Texteingabefeldern hat es jedoch den Nachteil, dass Nutzer die Vorbelegung manuell löschen müssen, wenn sie einen anderen Wert eintragen wollen. Über ein einfaches JavaScript lässt sich dies automatisieren. Fokussiert (Fokus) der Nutzer das Eingabefeld, etwa indem er hineinklickt, wird die Vorbelegung entfernt; lässt er es leer und entfernt den Fokus aus dem Eingabefeld, wird die Vorbelegung wieder eingefügt.

<input type="text" name="suche" value="Vorbelegung"
  onblur="if(this.value == '') this.value='Vorbelegung'"
  onfocus="if(this.value == 'Vorbelegung') this.value=''"
/>

Passwortfeld: type="password"

Erzeugt ein einzeiliges Texteingabefeld, dessen Zeichen im Gegensatz zu Standardtexteingabefeldern versteckt werden, in den meisten Browsern in Form von Asterisken (*).

<input type="password" name="password" />

Auch Passwortfelder erlauben Längenbeschränkungen und eine Vorbelegung.

<input type="password" name="password"
  size="15" maxlength="32" value="Vorbelegung"
  onblur="if(this.value == '') this.value='Vorbelegung'"
  onfocus="if(this.value == 'Vorbelegung') this.value=''"
/>

Kontrollkästchen: type="checkbox"

Mit type="checkbox" wird ein Kontrollkästchen erzeugt. Kontrollkästchen sind Ein-/Ausschalter, von denen der Benutzer keinen, einen oder mehrere ankreuzen kann. Das Attribut value ist notwendig und gibt den Wert des Kontrollkästchens an, der mit dem Absenden des Formulars an das verarbeitende Programm übertragen wird.

<label><input type="checkbox" name="contact" value="phone" />
  Ich freue mich auf den Anruf eines Vertriebsmitarbeiters.</label><br />
<label><input type="checkbox" name="contact" value="mail" />
  Bitte senden Sie mir zukünftig weitere Informationen per E-Mail.</label>

Mithilfe des Attributs checked lassen sich Kontrollkästchen vorselektieren.

<label><input type="checkbox" name="contact" value="phone"
  checked="checked" />Ich freue mich auf den Anruf eines
  Vertriebsmitarbeiters.</label><br />
<label><input type="checkbox" name="contact" value="mail" />
  Bitte senden Sie mir zukünftig weitere Informationen per E-Mail.</label>


Abb. 5.25: Kontrollkästchen

Optionsfeld: type="radio"

type="radio" erzeugt ein Optionsfeld. Optionsfelder sind wie Kontrollkästchen Ein-/Ausschalter, schließen sich jedoch gegenseitig aus, wenn sie sich den gleichen Namen teilen. Autoren sollten sicherstellen, dass ein Optionsfeld als aktiv vorbelegt ist.

Anrede:
<label><input type="radio" name="anrede" value="herr"
  checked="checked" /> Herr</label>
<label><input type="radio" name="anrede" value="frau" />Frau</label>


Abb. 5.26: Optionsfelder

Absenden-Schaltfläche: type="submit"

type="submit" erzeugt eine einfache Absenden-Schaltfläche. Aktiviert man sie, wird das Formular abgeschickt. Benutzerprogramme verwenden den Wert des Attributs value als Beschriftung für die Schaltfläche.

<input type="submit" value="Absenden" />


Abb. 5.27: Absenden-Schaltfläche

Zurücksetzen-Schaltfläche: type="reset"

type="reset" erzeugt eine Schaltfläche zum Zurücksetzen des Formulars in seinen Anfangszustand. Benutzerprogramme verwenden den Wert des Attributs value als Beschriftung für die Schaltfläche.

<input type="reset" value="Abbrechen" />

Zurücksetzen-Schaltflächen sehen genau so aus wie Absenden-Schaltflächen, nur deren Beschriftung unterscheidet sich. Daher geschieht es recht häufig, dass Nutzer nach dem Ausfüllen eines Formulars versehentlich auf die Zurücksetzen- anstatt auf die Absenden-Schaltfläche klicken. Um dies zu vermeiden, verzichten viele Webautoren auf Zurücksetzen-Schaltflächen. Ein Nachteil für Nutzer ergibt sich daraus nicht. Oder wie oft hatten Sie bereits das Bedürfnis, Eingaben, die Sie in einem Formular vorgenommen haben, aktiv zu verwerfen?

Verstecktes Steuerelement: type="hidden"

type="hidden" erzeugt ein verstecktes Steuerelement, das nicht dargestellt wird, dessen Wert aber mit dem Formular übertragen wird. Webautoren verwenden versteckte Felder im Allgemeinen, um Informationen von Client/Server-Operationen zu speichern, die ansonsten dadurch, dass HTTP ein zustandsloses Protokoll ist, verloren gingen.

<input type="hidden" name="parameter" value="wert" />

Dateiauswahl: type="file"

type="file" erzeugt ein Dateiauswahl-Steuerelement, das Benutzern die Auswahl einer Datei gestattet, sodass ihr Inhalt mit dem Formular übertragen werden kann. Benutzerprogramme können den Wert des value-Attributs als Anfangdateinamen verwenden.

Datei hochladen: <input type="file" name="upload" />


Abb. 5.28: Dateiauswahl-Steuerelement

Auswahlmenüs: Der Elementtyp select

Das Element select erzeugt in Verbindung mit option-Elementen ein Menü, das Benutzern Alternativen anbietet, aus denen sie wählen können. Normalerweise wird beim Absenden des Formulars der Elementinhalt des ausgewählten Listeneintrags übertragen. Webautoren können jedoch über das Attribut value bestimmen, dass ein anderer Wert übertragen wird. Einträge lassen sich über die Angabe selected="selected" vorwählen.

<select name="lacrimosa">
  <option>Angst (CD)</option>
  <option>Einsamkeit (CD)</option>
  <option>Alles Lüge (CDS)</option>
  <option>Satura (CD)</option>
  <option>Schakal (CDS)</option>
  <option>Inferno (CD)</option>
  <option>Stolzes Herz (CDS)</option>
  <option>Stille (CD)</option>
  <option>Live (DCD)</option>
  <option>Allein zu zweit (CDS)</option>
  <option selected="selected">Elodia (CD)</option>
  <option>Der Morgen danach (CDS)</option>
  <option>Fassade (CD)</option>
  <option>Durch Nacht und Flut (CDS)</option>
  <option>Echos (CD)</option>
  <option>Lichtgestalt (CD)</option>
  <option>Lichtgestalten (EP)</option>
  <option>Lichtjahre (DCD)</option>
</select>


Abb. 5.29: Auswahlmenü mit Vorselektierung


Abb. 5.30: Auswahlmenü mit Mehrfachselektion

Das Attribut size gibt an, wie viele Einträge beziehungsweise Zeilen eines Auswahlmenüs sichtbar sind. Wird size nicht angegeben oder ist sein Wert gleich 1, stellen Browser das Auswahlmenü im Allgemeinen als Klappliste dar.

Über die Angabe multiple="multiple" geben Sie an, dass auch mehrere Einträge selektiert werden können. Dann sollten Sie die Anzahl der Zeilen, die angezeigt werden sollen, angeben, da Browser sich in diesem Fall unterschiedlich verhalten. Einige Browser zeigen einen Teil der Liste an, andere klappen sie vollständig auf. Für Nutzer ist eine Mehrfachauswahl im Allgemeinen nicht unmittelbar erkennbar, auch wissen viele nicht, wie sie mehrere Einträge selektieren können (Strg bei gleichzeitigem Selektieren der gewünschten Einträge). Ein kleiner Hinweis kann da nicht schaden, beispielsweise in Form eines title-Attributs.

<select name="lacrimosa" multiple="multiple" size="10"
  title="Mehrfachauswahl bei gedrückter Strg-Taste möglich">
  <option>Angst (CD)</option>
  <option>Einsamkeit (CD)</option>
  <!-- ... -->
  <option>Lichtgestalten (EP)</option>
  <option>Lichtjahre (DCD)</option>
</select>

Das Element optgroup gestattet es Autoren, die Auswahlmöglichkeiten logisch zu gruppieren. Dies ist besonders dann hilfreich, wenn der Nutzer aus einer langen Liste wählen muss. Gruppen dürfen nicht verschachtelt werden. Über das Attribut label vergeben Sie eine Menübeschriftung für die Gruppe von Einträgen, die im Auswahlmenü als selbst nicht auswählbare Überschrift angezeigt wird.

<select name="lacrimosa" multiple="multiple" size="10">
  <optgroup label="CD">
    <option>Angst</option>
    <option>Einsamkeit</option>
    <option>Satura</option>
    <option>Inferno</option>
    <option>Stille</option>
    <option>Elodia</option>
    <option>Fassade</option>
    <option>Echos</option>
    <option>Lichtgestalt</option>
  </optgroup>
  <optgroup label="CDS">
    <option>Alles Lüge</option>
    <option>Schakal</option>
    <option>Stolzes Herz</option>
    <option>Allein zu zweit</option>
    <option>Der Morgen danach</option>
    <option>Durch Nacht und Flut</option>
  </optgroup>
  <optgroup label="DCD">
    <option>Live</option>
    <option>Lichtjahre (DCD)</option>
  </optgroup>
  <optgroup label="EP">
    <option>Lichtgestalten</option>
  </optgroup>
</select>


Abb. 5.31: Mehrfachselektion bei einem gruppierten Auswahlmenü

Mehrzeilige Texteingabefelder: Der Elementtyp textarea

Das Element textarea erzeugt ein mehrzeiliges Texteingabefeld. Benutzerprogramme sollten den Elementinhalt als Anfangswert des Steuerelements verwenden und diesen Text zu Beginn darstellen. Über die Attribute rows und cols geben Sie die Anzahl der sichtbaren Textzeilen beziehungsweise die sichtbare Breite in durchschnittlicher Zeichenbreite an.

Zeilen, die länger sind als die sichtbare Breite, werden umbrochen. Darüber hinaus stellen Browser im Allgemeinen Rollbalken dar, falls der Inhalt länger wird als die Anzahl der sichtbaren Textzeilen.

<textarea name="statement" cols="40" rows="10">Inhalt</textarea>


Abb. 5.32: Mehrzeiliges Texteingabefeld mit Vorbelegung

Zum Seitenanfang

Beschriftungen: Der Elementtyp label

Einige Steuerelemente haben bereits automatisch eine zugehörige Beschriftung oder erhalten sie mittels eines Attributs value, beispielsweise Schaltflächen, während andere keine Beschriftung haben.

Das Element label dient der Beschriftung von Steuerelementen, die keine implizite Beschriftung haben.

Eine Verwendung des label-Elements demonstriert das Beispiel zu Kontrollkästchen auf Seite 217. Dadurch wird ein direkter Bezug zwischen dem Kontrollkästchen und der dazugehörigen Beschriftung »Ich freue mich auf den Anruf eines Vertriebsmitarbeiters.« hergestellt. In vielen Browsern ist es dadurch möglich, das Kontrollkästchen auch durch Klick auf die Beschriftung an- oder abzuwählen. Dient das label-Element der Beschriftung eines Eingabefelds, würde dieses bei Klick auf die Beschriftung fokussiert werden. Auf die visuelle Gestaltung eines Formulars hat das label-Element standardmäßig keinen direkten Einfluss, wenngleich sich dies mit CSS natürlich ändern ließe.

Der Bezug zwischen Beschriftung und Steuerelement lässt sich auch dann herstellen, wenn diese im Quelltext durch Markup voneinander getrennt sind, beispielsweise durch eine Layouttabelle zur übersichtlichen Anordnung der Formularelemente. In diesem Fall vergeben Sie dem Steuerelement eine eindeutige ID und referenzieren es über das Attribut for im label-Element.

<table>
  <tr>
    <td><label for="name">Name</label></td>
    <td><input type="text" name="name" id="name" /></td>
  </tr>
  <tr>
    <td><label for="e-mail">E-Mail</label></td>
    <td><input type="text" name="e-mail" id="e-mail" /></td>
  </tr>
  <tr>
    <td><label for="nachricht">Ihre Nachricht</label></td>
    <td><textarea name="nachricht" id="nachricht" cols="30"
      rows="7"></textarea></td>
  </tr>
</table>


Abb. 5.33: label-Elemente erhöhen die Benutzerfreundlichkeit Ihrer Formulare

Zum Seitenanfang

Struktur: Die Elementtypen fieldset und legend

Das Element fieldset gestattet es Webautoren, thematisch zusammengehörige Formularinhalte zu gruppieren. Über das Element legend wird der Gruppe ein Name verliehen, der die Funktion einer Überschrift erfüllen kann.

Bedingung 12.3 der BITV fordert:

»Große Informationsblöcke sind mittels Elementen der verwendeten Markup-Sprache in leichter handhabbare Gruppen zu unterteilen.«

Eine Gruppierung vereinfacht Nutzern die Orientierung innerhalb eines Formulars und dessen Bedienung, vor allem dann, wenn dieses besonders umfangreich ist; die Beschriftung verbessert darüber hinaus die Zugänglichkeit, wenn das Formular nicht visuell ausgegeben wird. Die meisten Browser visualisieren das fieldset-Element als Rahmen um die darin enthaltenen Formularelemente.

<form action="http://www.example.org/kontakt">
  <fieldset>
  <legend>Persönliche Angaben</legend>
    <!-- Auszeichnungs- und Steuerelemente -->
  </fieldset>
  <!-- Weitere Gruppen -->
</form>


Abb. 5.34: Gruppierung von Steuerelementen mittels fieldset