Signatur
Beschreibung
Die Eigenschaft value gibt an, was gerade in einem <input>-Element steht. Beim Lesen bekommt man den aktuellen Wert als string, beim Schreiben ändert man ihn per Skript. Man braucht sie ständig: zum Auswerten von Formularen, zum Vorausfüllen von Feldern, zum Zurücksetzen von Eingaben und für die Prüfung direkt während der Eingabe.
Wichtig ist der Unterschied zum HTML-Attribut value. Das Attribut legt nur den Standardwert fest (per Skript erreichbar über defaultValue). Die Eigenschaft value enthält dagegen den aktuellen Wert, der sich durch Benutzereingaben ändert. Schreibt man value, bleibt das Attribut unverändert. getAttribute("value") gibt daher weiterhin den ursprünglichen Wert zurück.
Was genau in value steht, hängt vom type des Feldes ab:
text,search,email,password: der eingegebene Text. Beiemailundurlentfernt der Browser führende und abschließende Leerzeichen.number,range: eine Zeichenkette wie"42", keine Zahl. Eine Zahl liefernvalueAsNumberoderNumber(...).date,time,month: ein normiertes Format wie"2024-05-17", egal wie das Datum angezeigt wird.checkbox,radio: der Wert, der beim Absenden übertragen wird (ohne gesetztes Attribut"on"). Ob das Feld angehakt ist, steht inchecked, nicht invalue.file: ein Pfad wie"C:\\fakepath\\datei.png". Die eigentlichen Dateien stehen infiles.
Ungültige Werte werden bereinigt. Setzt man zum Beispiel bei type="number" den Wert "abc", wird value zu "". Bei type="color" wird ein ungültiger Wert zu "#000000".
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $neuerWert | string | Nur beim Schreiben: der neue Wert. Andere Typen werden in eine Zeichenkette umgewandelt, null wird dabei zu "". Bei type="file" ist nur "" erlaubt. |
Rückgabewert
"", nie null.Beispiele
Eingabe lesen und prüfen
// HTML: <input id="name" type="text"> <button id="ok">OK</button>
const input = document.querySelector('#name');
document.querySelector('#ok').addEventListener('click', () => {
const name = input.value.trim();
if (name === '') {
console.log('Bitte einen Namen eingeben.');
return;
}
console.log(`Hallo, ${name}!`);
});
Live-Zeichenzähler mit dem input-Event
// HTML: <input id="tweet" maxlength="140"> <span id="zaehler"></span>
const feld = document.querySelector('#tweet');
const zaehler = document.querySelector('#zaehler');
const aktualisieren = () => {
zaehler.textContent = `${feld.value.length}/140`;
};
feld.addEventListener('input', aktualisieren);
aktualisieren();
Zahlenfeld: Zeichenkette vs. valueAsNumber
// HTML: <input id="menge" type="number" value="3">
const menge = document.querySelector('#menge');
console.log(typeof menge.value); // Zeichenkette!
console.log(menge.value + 1); // wird aneinandergehängt
console.log(menge.valueAsNumber + 1); // echte Rechnung
menge.value = 'abc'; // ungültig -> wird bereinigt
console.log(JSON.stringify(menge.value));
Wert setzen, Attribut bleibt gleich
// HTML: <input id="stadt" value="Berlin">
const stadt = document.querySelector('#stadt');
stadt.value = 'Hamburg';
console.log(stadt.value); // aktueller Wert
console.log(stadt.getAttribute('value')); // Attribut
console.log(stadt.defaultValue); // Standardwert
// Zurücksetzen auf den Standardwert
stadt.value = stadt.defaultValue;
console.log(stadt.value);
// Wichtig · Fallstricke
- Immer eine Zeichenkette: Auch bei
type="number"oderrangeistvalueeinstring."3" + 1ergibt"31". Zum RechnenvalueAsNumberoderNumber()verwenden. Bei Datumsfeldern gibt esvalueAsDate. - Kein Event beim Setzen per Skript: Wenn ein Skript
valuesetzt, werden wederinputnochchangeausgelöst. Bei Bedarf selbst auslösen:el.dispatchEvent(new Event('input', { bubbles: true })). Frameworks wie React überwachen den Wert selbst. Dort reicht einfaches Setzen oft nicht, weil der interne Zustand nichts davon erfährt. - Checkbox/Radio:
valuesagt nichts darüber, ob das Feld angehakt ist. Dafürcheckedverwenden. - Datei-Felder: Aus Sicherheitsgründen darf man bei
type="file"nur""setzen (zum Leeren). Jeder andere Wert wirft einenInvalidStateError. Der gelesene Pfad beginnt immer mitC:\fakepath\. - Sicherheit (XSS): Benutzereingaben aus
valuenie ungeprüft mitinnerHTMLins Dokument schreiben. StattdessentextContentverwenden oder den Inhalt vorher unschädlich machen (escapen). Eine Prüfung im Browser ersetzt nie die Prüfung auf dem Server. - Cursorposition: Wird
valuewährend der Eingabe neu gesetzt, kann der Cursor ans Ende springen. Gegebenenfalls die Position mitselectionStart/setSelectionRange()sichern und wiederherstellen. - Kompatibilität: Wird von allen Browsern unterstützt. Wie Werte bereinigt werden, ist in der HTML-Spezifikation festgelegt und in modernen Browsern einheitlich.