Start · Sprachen · JavaScript · Referenz · HTMLInputElement.step

HTMLInputElement.step

Eigenschaft

Liest oder setzt das <code>step</code>-Attribut eines <code>&lt;input&gt;</code>-Elements und legt damit die erlaubte Schrittweite für Zahlen-, Bereichs- und Datums-/Zeitwerte fest.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

HTMLInputElement.step

Beschreibung

Die Eigenschaft step spiegelt das HTML-Attribut step eines <input>-Elements wider. Sie ist ein String und gibt an, in welchen Abständen sich der Wert bei den Typen number, range, date, time, datetime-local, month und week ändern darf. Neben einer positiven Zahl ist auch der Sonderwert "any" erlaubt, der jede Schrittweite zulässt.

Die Schrittweite wirkt sich an drei Stellen aus: auf die Pfeil-/Spinner-Bedienelemente und Tastatureingaben, auf die Methoden stepUp() und stepDown() sowie auf die Formularvalidierung. Werte, die nicht auf einem gültigen Schritt liegen, führen zu validity.stepMismatch === true. Die Schrittbasis ist min (falls gesetzt), sonst der ursprüngliche value-Attributwert, sonst 0.

Die Einheit hängt vom Typ ab: bei number/range sind es Zahleneinheiten (Standard 1), bei date Tage (Standard 1), bei month Monate, bei week Wochen, bei time und datetime-local Sekunden (Standard 60). Typisch nutzt man step für Preisfelder (0.01), Schieberegler mit groben Stufen oder Zeitfelder mit 15-Minuten-Raster.

Rückgabewert

Typ
string
Beschreibung
Der Wert des step-Attributs als String, z. B. "0.01" oder "any". Ist kein Attribut gesetzt, wird ein leerer String "" zurückgegeben (es gilt dann der typabhängige Standardschritt). Beim Setzen wird das Attribut entsprechend aktualisiert.

Beispiele

Schrittweite lesen und für Preise setzen

const preis = document.createElement('input');
preis.type = 'number';
console.log(JSON.stringify(preis.step)); // kein Attribut gesetzt

preis.step = '0.01';
preis.min = '0';
console.log(preis.step);
console.log(preis.getAttribute('step'));
"" 0.01 0.01

Validierung mit stepMismatch

const menge = document.createElement('input');
menge.type = 'number';
menge.min = '0';
menge.step = '5';

menge.value = '12';
console.log(menge.validity.stepMismatch); // 12 liegt nicht im 5er-Raster

menge.value = '15';
console.log(menge.validity.stepMismatch);

// Beliebige Werte zulassen
menge.step = 'any';
menge.value = '12.37';
console.log(menge.validity.stepMismatch);
true false false

Zeitfeld im 15-Minuten-Raster mit stepUp()

const uhrzeit = document.createElement('input');
uhrzeit.type = 'time';
uhrzeit.step = String(15 * 60); // Einheit: Sekunden!
uhrzeit.value = '09:00';

uhrzeit.stepUp();
console.log(uhrzeit.value);
uhrzeit.stepUp(2);
console.log(uhrzeit.value);
09:15 09:45

Schrittweite eines Reglers dynamisch umschalten

const regler = document.querySelector('#lautstaerke'); // <input type="range" min="0" max="100">
const fein = document.querySelector('#feinmodus');     // <input type="checkbox">

fein.addEventListener('change', () => {
  regler.step = fein.checked ? '1' : '10';
  console.log(`Schrittweite: ${regler.step}`);
});
Schrittweite: 1 (bzw. 10, je nach Checkbox)

// Wichtig · Fallstricke

  • String, keine Zahl: step liefert immer einen String. Für Berechnungen Number(input.step) verwenden und den Fall "any" bzw. "" gesondert behandeln.
  • Einheit bei Zeitfeldern: Bei time und datetime-local ist die Einheit Sekunden – step = "15" bedeutet 15 Sekunden, nicht Minuten. Ein Schritt unter 60 blendet in vielen Browsern zusätzlich ein Sekundenfeld ein.
  • Schrittbasis: Gültige Werte berechnen sich ab min (bzw. dem value-Attribut). Bei min="1" und step="5" sind 1, 6, 11 … gültig, nicht 5, 10, 15.
  • Ungültige Werte wie "0", negative Zahlen oder Text werden ignoriert; es gilt dann der Standardschritt. Ein Fehler wird nicht geworfen.
  • Gleitkomma: Browser runden intern, bei sehr kleinen Schritten (z. B. 0.001) kann die Validierung dennoch unerwartet ausfallen.
  • Bei nicht unterstützten Typen (z. B. text) hat step keine Wirkung. stepMismatch wird nur bei der Validierung geprüft; der Browser korrigiert keine manuell eingetippten Werte.
  • Die Eigenschaft wird von allen modernen Browsern unterstützt; die Darstellung der Bedienelemente (Spinner, Datumsauswahl) ist aber browserspezifisch.