<input type="search">

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

<input> Elemente vom Typ search sind Textfelder, die für die Eingabe von Suchanfragen durch den Benutzer konzipiert sind. Sie sind funktional identisch mit text Eingaben, können jedoch vom user agent unterschiedlich gestaltet werden.

Probieren Sie es aus

<label for="site-search">Search the site:</label>
<input type="search" id="site-search" name="q" />

<button>Search</button>
label {
  display: block;
  font:
    1rem "Fira Sans",
    sans-serif;
}

input,
label {
  margin: 0.4rem 0;
}

Wert

Das value Attribut enthält einen String, der den im Suchfeld enthaltenen Wert repräsentiert. Sie können dies mithilfe der HTMLInputElement.value Eigenschaft in JavaScript abrufen.

js
searchTerms = mySearch.value;

Wenn keine Validierungseinschränkungen für die Eingabe vorhanden sind (siehe Validierung für weitere Details), kann der Wert beliebiger Text oder ein leerer String ("") sein.

Zusätzliche Attribute

Zusätzlich zu den globalen Attributen und den Attributen, die auf alle <input> Elemente unabhängig von ihrem Typ wirken, unterstützen Suchfeldeingaben die folgenden Attribute.

list

Der Wert des list-Attributs ist die id eines im selben Dokument befindlichen <datalist> Elements. Das <datalist> bietet eine Liste mit vordefinierten Werten, die dem Benutzer als Vorschläge für diese Eingabe angeboten werden. Alle Werte in der Liste, die mit dem type nicht kompatibel sind, werden nicht in die vorgeschlagenen Optionen aufgenommen. Die bereitgestellten Werte sind Vorschläge, keine Anforderungen: Benutzer können aus dieser vordefinierten Liste auswählen oder einen anderen Wert eingeben.

maxlength

Die maximale Stringlänge (gemessen in UTF-16 Codeeinheiten), die der Benutzer in das Suchfeld eingeben kann. Dies muss ein ganzzahliger Wert von 0 oder höher sein. Wenn kein maxlength angegeben ist oder ein ungültiger Wert angegeben wird, hat das Suchfeld keine maximale Länge. Dieser Wert muss auch größer oder gleich dem Wert von minlength sein.

Die Eingabe schlägt bei der Einschränkungs-Validierung fehl, wenn die Länge des in das Feld eingegebenen Textes größer als maxlength UTF-16 Codeeinheiten ist. Die Einschränkungs-Validierung wird nur angewendet, wenn der Wert vom Benutzer geändert wird.

minlength

Die minimale Stringlänge (gemessen in UTF-16 Codeeinheiten), die der Benutzer in das Suchfeld eingeben kann. Dies muss ein nicht-negativer ganzzahliger Wert kleiner oder gleich dem durch maxlength spezifizierten Wert sein. Wenn kein minlength angegeben ist oder ein ungültiger Wert angegeben wird, hat die Sucheingabe keine Mindestlänge.

Das Suchfeld schlägt bei der Einschränkungs-Validierung fehl, wenn die Länge des in das Feld eingegebenen Textes weniger als minlength UTF-16 Codeeinheiten beträgt. Die Einschränkungs-Validierung wird nur angewendet, wenn der Wert vom Benutzer geändert wird.

pattern

Das pattern Attribut, falls angegeben, ist ein regulärer Ausdruck, den der value der Eingabe (siehe value) erfüllen muss, damit der Wert die Einschränkungs-Validierung besteht. Es muss ein gültiger JavaScript-Regulärer Ausdruck sein, wie er vom RegExp Typ verwendet wird, und wie in unserem Leitfaden für reguläre Ausdrücke dokumentiert; das 'u'-Flag wird beim Kompilieren des regulären Ausdrucks angegeben, sodass das Muster als eine Folge von Unicode-Codepunkten und nicht als ASCII behandelt wird. Es sollten keine Schrägstriche um den Mustertext angegeben werden.

Wenn das angegebene Muster nicht angegeben oder ungültig ist, wird kein regulärer Ausdruck angewendet, und dieses Attribut wird vollständig ignoriert.

Hinweis: Verwenden Sie das title Attribut, um Text anzugeben, der in den meisten Browsern als Tooltip angezeigt wird, um zu erläutern, welche Anforderungen erfüllt werden müssen, um das Muster zu erfüllen. Sie sollten auch anderen erklärenden Text in der Nähe einschließen.

Siehe den Abschnitt Festlegen eines Musters für Details und ein Beispiel.

placeholder

Das placeholder Attribut ist ein String, der dem Benutzer einen kurzen Hinweis darauf gibt, welche Art von Informationen im Feld erwartet werden. Es sollte ein Wort oder eine kurze Phrase sein, die den erwarteten Datentyp zeigt, anstatt einer erklärenden Nachricht. Der Text darf keine Wagenrückläufe oder Zeilenvorschubrücke enthalten.

Wenn der Inhalt der Kontrolle eine bestimmte Richtung (LTR oder RTL) hat, aber der Platzhalter in der entgegengesetzten Richtung angezeigt werden muss, können Sie Unicode-Formatierungszeichen für die bidirektionale Algorithmusformatierung verwenden, um die Richtung im Platzhalter zu überschreiben; siehe Anleitung zur Verwendung von Unicode-Steuerelementen für bidi-Text für weitere Informationen.

Hinweis: Vermeiden Sie, wenn möglich, die Verwendung des placeholder Attributs. Es ist nicht so semantisch nützlich wie andere Möglichkeiten, Ihr Formular zu erklären, und kann unerwartete technische Probleme mit Ihrem Inhalt verursachen. Siehe <input> Labels für weitere Informationen.

readonly

Ein Boolean-Attribut, das, wenn es vorhanden ist, bedeutet, dass dieses Feld vom Benutzer nicht bearbeitet werden kann. Sein value kann jedoch immer noch durch JavaScript-Code, der direkt die HTMLInputElement value Eigenschaft setzt, geändert werden.

Hinweis: Da ein schreibgeschütztes Feld keinen Wert haben kann, hat required keine Auswirkungen auf Eingaben mit dem ebenfalls spezifizierten readonly-Attribut.

size

Das size Attribut ist ein numerischer Wert, der angibt, wie viele Zeichen breit das Eingabefeld sein soll. Der Wert muss eine Zahl größer als null sein, und der Standardwert ist 20. Da die Zeichenbreiten variieren, kann dies mehr oder weniger genau sein und sollte nicht darauf verlassen werden, dass es so ist; die resultierende Eingabe kann je nach den Zeichen und der Schriftart breiter oder schmaler als die angegebene Anzahl von Zeichen sein (font Einstellungen in Verwendung).

Dies setzt keine Begrenzung dafür, wie viele Zeichen der Benutzer in das Feld eingeben kann. Es gibt nur an, wie viele ungefähr gleichzeitig sichtbar sein können. Um ein Obergrenze für die Länge der Eingabedaten festzulegen, verwenden Sie das maxlength Attribut.

spellcheck

spellcheck ist ein globales Attribut, das angibt, ob die Rechtschreibprüfung für ein Element aktiviert werden soll. Es kann auf jedem bearbeitbaren Inhalt verwendet werden, aber hier betrachten wir die spezifische Verwendung von spellcheck auf <input> Elementen. Die zulässigen Werte für spellcheck sind:

false

Deaktiviert die Rechtschreibprüfung für dieses Element.

true

Aktiviert die Rechtschreibprüfung für dieses Element.

"" (leerer String) oder kein Wert

Befolgen Sie das Standardverhalten des Elements für die Rechtschreibprüfung. Dies kann auf den spellcheck-Einstellungen der Eltern oder anderen Faktoren basieren.

Ein Eingabefeld kann die Rechtschreibprüfung aktiviert haben, wenn es nicht das readonly Attribut gesetzt hat und nicht deaktiviert ist.

Der Wert, der durch Lesen von spellcheck zurückgegeben wird, spiegelt möglicherweise nicht den tatsächlichen Zustand der Rechtschreibprüfung innerhalb einer Kontrolle wider, wenn die Einstellungen des user agents die Einstellung außer Kraft setzen.

Nicht-standardisierte Attribute

Die folgenden nicht-standardisierten Attribute sind für Suchfeldeingaben verfügbar. Vermeiden Sie ihre Verwendung, wo möglich.

incremental

Das Boolean-Attribut incremental ist eine Erweiterung von WebKit und Blink (also von Safari, Opera, Chrome usw. unterstützt). Wenn es vorhanden ist, teilt es dem user agent mit, dass die Eingaben als Live-Suche verarbeitet werden sollen. Während der Benutzer den Wert des Feldes bearbeitet, sendet der user agent search Ereignisse an das HTMLInputElement Objekt, das das Suchfeld repräsentiert. Dadurch kann Ihr Code die Suchergebnisse in Echtzeit aktualisieren, während der Benutzer die Suche bearbeitet.

Wenn incremental nicht angegeben ist, wird das search Ereignis nur gesendet, wenn der Benutzer eine Suche ausdrücklich initiiert (zum Beispiel durch Drücken der Enter oder Return Taste beim Bearbeiten des Feldes).

Das search Ereignis ist so rate-limitiert, dass es nicht häufiger als in einem Implementierungsdefinierten Intervall gesendet wird.

results

Das results Attribut—nur von Safari unterstützt—ist ein numerischer Wert, der es Ihnen ermöglicht, die maximale Anzahl an Einträgen zu überschreiben, die im nativ bereitgestellten Dropdown-Menü des <input> Elements mit früheren Suchanfragen angezeigt werden sollen.

Der Wert muss eine nicht-negative Dezimalzahl sein. Wenn nicht angegeben oder ein ungültiger Wert angegeben wird, wird die standardmäßige maximale Anzahl von Einträgen des Browsers verwendet.

Verwendung von Sucheingaben

<input> Elemente vom Typ search sind den Elementen vom Typ text sehr ähnlich, außer dass sie speziell für die Bearbeitung von Suchbegriffen gedacht sind. Ihr Verhalten ist grundsätzlich gleich, aber Benutzeragenten können sich dafür entscheiden, sie standardmäßig anders zu gestalten (und natürlich können Webseiten mit CSS eigene Stile darauf anwenden).

Einfaches Beispiel

html
<form>
  <div>
    <input type="search" id="mySearch" name="q" />
    <button>Search</button>
  </div>
</form>

Dies wird wie folgt gerendert:

q ist der am häufigsten vergebene name für Sucheingaben, obwohl es nicht obligatorisch ist. Wenn das Formular übermittelt wird, wird das Daten-Namens/Wert-Paar zum Server mit q=searchTerm gesendet.

Hinweis: Sie müssen daran denken, einen name für Ihre Eingabe festzulegen, andernfalls wird nichts übermittelt.

Unterschiede zwischen den Typen „search“ und „text“

Die wichtigsten grundlegenden Unterschiede liegen in der Art und Weise, wie Browser sie behandeln. Das erste, was zu beachten ist, ist, dass einige Browser ein Kreuzsymbol anzeigen, das angeklickt werden kann, um den Suchbegriff sofort zu entfernen, falls gewünscht. In Chrome wird diese Aktion auch ausgelöst, wenn Escape gedrückt wird. Das folgende Screenshot stammt aus Chrome:

Fokussiertes Suchfeld, mit Fokusrahmen, mit dem Text 'cats'. Es gibt ein x-Symbol in der Eingabe, das an der rechten Seite anliegt.

Darüber hinaus speichern moderne Browser in der Regel automatisch Suchbegriffe, die zuvor domänenübergreifend eingegeben wurden und die dann bei nachfolgenden Suchvorgängen in Sucheingaben auf dieser Domäne als Autovervollständigungsoptionen erscheinen. Dies hilft Benutzern, die dazu neigen, im Laufe der Zeit ähnliche Suchanfragen durchzuführen. Dieses Screenshot ist von Firefox:

Ein Eingabefeld im Fehlerzustand mit rotem Fokusrahmen. Der Benutzer hat den Buchstaben 'h' eingegeben. Eine Popup-Auswahlliste ist direkt unter dem Eingabefeld geöffnet, mit zwei Optionen: hello und hermansje.

An diesem Punkt werfen wir einen Blick auf einige nützliche Techniken, die Sie auf Ihre Suchformulare anwenden können.

Platzhalter setzen

Sie können einen nützlichen Platzhalter in Ihrer Sucheingabe bereitstellen, der einen Hinweis darauf geben könnte, was zu tun ist, indem Sie das placeholder Attribut verwenden. Sehen Sie sich das folgende Beispiel an:

html
<form>
  <div>
    <input
      type="search"
      id="mySearch"
      name="q"
      placeholder="Search the site…" />
    <button>Search</button>
  </div>
</form>

Sie können unten sehen, wie der Platzhalter gerendert wird:

Suchformular-Etiketten und Zugänglichkeit

Ein Problem bei Suchformularen ist ihre Zugänglichkeit; eine gängige Designpraxis ist es, dem Suchfeld kein Etikett zu geben (obwohl möglicherweise ein Lupen-Symbol oder ähnliches vorhanden ist), da der Zweck eines Suchformulars für sehende Benutzer aufgrund der Platzierung normalerweise ziemlich offensichtlich ist (dieses Beispiel zeigt ein typisches Muster).

Dies könnte jedoch Verwirrung für Benutzer von Bildschirmlesegeräten verursachen, da sie keine verbale Angabe darüber haben, was die Suchfunktion ist. Eine Möglichkeit, dies zu umgehen, ohne Ihr visuelles Design zu beeinträchtigen, besteht darin, WAI-ARIA Funktionen zu verwenden:

  • Ein role Attribut mit dem Wert search auf dem <form> Element führt dazu, dass Bildschirmleser ankündigen, dass das Formular ein Suchformular ist.
  • Falls das nicht ausreicht, können Sie ein aria-label Attribut an der <input> selbst verwenden. Dies sollte ein beschreibender Text sein, der vom Bildschirmleser vorgelesen wird; es dient als nicht-visuelles Äquivalent zu <label>.

Schauen wir uns ein Beispiel an:

html
<form role="search">
  <div>
    <input
      type="search"
      id="mySearch"
      name="q"
      placeholder="Search the site…"
      aria-label="Search through site content" />
    <button>Search</button>
  </div>
</form>

Sie können unten sehen, wie dies gerendert wird:

Es gibt keinen visuellen Unterschied zum vorherigen Beispiel, aber Benutzer von Bildschirmlesegeräten haben wesentlich mehr Informationen zur Verfügung.

Hinweis: Siehe Wegweiser/Landmarks für weitere Informationen über solche Zugänglichkeitsmerkmale.

Physische Größe des Eingabeelements

Die physische Größe des Eingabefeldes kann mit dem size Attribut gesteuert werden. Damit können Sie die Anzahl der Zeichen angeben, die das Eingabefeld gleichzeitig anzeigen kann. In diesem Beispiel beispielsweise ist das Suchfeld 30 Zeichen breit:

html
<form>
  <div>
    <input
      type="search"
      id="mySearch"
      name="q"
      placeholder="Search the site…"
      size="30" />
    <button>Search</button>
  </div>
</form>

Das Ergebnis ist dieses breitere Eingabefeld:

Validierung

<input> Elemente vom Typ search haben die gleichen Validierungsfunktionen wie normale text Eingaben. Es ist weniger wahrscheinlich, dass Sie in Suchfeldern allgemein Validierungsfunktionen verwenden möchten. In vielen Fällen sollten Benutzer einfach alles suchen dürfen, aber es gibt einige Fälle zu berücksichtigen, wie Suchvorgänge gegen Daten in einem bekannten Format.

Hinweis: HTML-Formularvalidierung ist kein Ersatz für Skripte, die sicherstellen, dass die eingegebenen Daten im richtigen Format vorliegen. Es ist viel zu einfach für jemanden, Anpassungen am HTML vorzunehmen, die es ihm ermöglichen, die Validierung zu umgehen oder sie vollständig zu entfernen. Es ist auch möglich, dass jemand Ihr HTML vollständig umgeht und die Daten direkt an Ihren Server sendet. Wenn Ihr serverseitiger Code die empfangenen Daten nicht validiert, könnte es zu katastrophalen Problemen kommen, wenn nicht korrekt formatierte Daten (oder Daten, die zu groß sind, vom falschen Typ sind usw.) in Ihre Datenbank eingegeben werden.

Eine Anmerkung zur Gestaltung

Es gibt nützliche Pseudoklassen zum Gestalten von gültigen/ungültigen Formularelementen: :valid und :invalid. In diesem Abschnitt verwenden wir das folgende CSS, das ein Häkchen neben Eingaben enthält, die gültige Werte enthalten, und ein Kreuz neben Eingaben, die ungültige Werte enthalten.

css
input:invalid ~ span::after {
  content: "✖";
  padding-left: 5px;
  position: absolute;
}

input:valid ~ span::after {
  content: "✓";
  padding-left: 5px;
  position: absolute;
}

Die Technik erfordert auch, dass ein <span> Element nach dem Formularelement platziert wird, das als Halter für die Symbole fungiert. Dies war erforderlich, weil einige Eingabetypen in einigen Browsern Symbole, die direkt danach platziert werden, nicht sehr gut anzeigen.

Eingabe notwendig machen

Sie können das required Attribut verwenden, um auf einfache Weise sicherzustellen, dass vor dem Absenden des Formulars ein Wert eingegeben werden muss:

html
<form>
  <div>
    <input
      type="search"
      id="mySearch"
      name="q"
      placeholder="Search the site…"
      required />
    <button>Search</button>
    <span class="validity"></span>
  </div>
</form>

Dies rendert wie folgt:

Außerdem zeigt der Browser eine Meldung an, wenn Sie versuchen, das Formular ohne Eingabe eines Suchbegriffs abzusenden. Das folgende Beispiel ist aus Firefox:

Formularfeld mit angefügter Meldung, die besagt: 'Bitte dieses Feld ausfüllen'

Verschiedene Nachrichten werden angezeigt, wenn Sie versuchen, das Formular mit verschiedenen Arten von ungültigen Daten in den Eingaben abzusenden; siehe die Beispiele unten.

Eingabewertlänge

Sie können eine Mindestlänge in Zeichen für den eingegebenen Wert mit dem minlength Attribut angeben; verwenden Sie ähnlich maxlength, um die maximale Länge des eingegebenen Wertes festzulegen.

Das folgende Beispiel erfordert, dass der eingegebene Wert 4–8 Zeichen lang ist.

html
<form>
  <div>
    <label for="mySearch">Search for user</label>
    <input
      type="search"
      id="mySearch"
      name="q"
      placeholder="User IDs are 4–8 characters in length"
      required
      size="30"
      minlength="4"
      maxlength="8" />
    <button>Search</button>
    <span class="validity"></span>
  </div>
</form>

Dies rendert wie folgt:

Wenn Sie versuchen, das Formular mit weniger als 4 Zeichen einzureichen, erhalten Sie eine entsprechende Fehlermeldung (die zwischen den Browsern unterschiedlich ist). Wenn Sie versuchen, mehr als 8 Zeichen einzugeben, lässt der Browser dies nicht zu.

Angeben eines Musters

Sie können das pattern Attribut verwenden, um einen regulären Ausdruck anzugeben, dem der eingegebene Wert folgen muss, um als gültig angesehen zu werden (siehe Validierung gegen einen regulären Ausdruck für einen Schnellkurs).

Schauen wir uns ein Beispiel an. Angenommen, wir wollten ein Suchformular für Produkt-IDs bereitstellen, und die IDs waren alle Codes aus zwei Buchstaben gefolgt von vier Zahlen. Das folgende Beispiel deckt dies ab:

html
<form>
  <div>
    <label for="mySearch">Search for product by ID:</label>
    <input
      type="search"
      id="mySearch"
      name="q"
      placeholder="two letters followed by four numbers"
      required
      size="30"
      pattern="[A-z]{2}[0-9]{4}" />
    <button>Search</button>
    <span class="validity"></span>
  </div>
</form>

Dies rendert wie folgt:

Beispiele

Ein gutes Beispiel für ein Suchformular im Kontext finden Sie in unserem website-aria-roles Beispiel (siehe es live).

Technische Zusammenfassung

Wert Ein String, der den im Suchfeld enthaltenen Wert repräsentiert.
Ereignisse [`change`](/de/docs/Web/API/HTMLElement/change_event) und [`input`](/de/docs/Web/API/Element/input_event)
Unterstützte Allgemeine Attribute autocomplete, list, maxlength, minlength, pattern, placeholder, required, size.
IDL-Attribute value
DOM-Schnittstelle

[`HTMLInputElement`](/de/docs/Web/API/HTMLInputElement)

Methoden [`select()`](/de/docs/Web/API/HTMLInputElement/select), [`setRangeText()`](/de/docs/Web/API/HTMLInputElement/setRangeText), [`setSelectionRange()`](/de/docs/Web/API/HTMLInputElement/setSelectionRange).
Implizite ARIA-Rolle ohne list Attribut: searchbox mit list Attribut: combobox

Spezifikationen

Specification
HTML
# text-(type=text)-state-and-search-state-(type=search)

Browser-Kompatibilität

Siehe auch