Start · Sprachen · JavaScript · Referenz · ValidityState.rangeUnderflow

ValidityState.rangeUnderflow

Eigenschaft

Schreibgeschützter Boolean, der <code>true</code> ist, wenn der Wert eines Formularfelds kleiner ist als der im <code>min</code>-Attribut festgelegte Mindestwert.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

ValidityState.rangeUnderflow

Beschreibung

Die schreibgeschützte Eigenschaft rangeUnderflow der Schnittstelle ValidityState zeigt an, ob der aktuelle Wert eines <input>-Elements die Untergrenze aus dem min-Attribut unterschreitet. Ist das der Fall, liefert sie true. Das Element gilt dann als ungültig und passt auf die CSS-Pseudoklassen :invalid und :out-of-range.

Die Prüfung greift nur bei Eingabetypen mit geordnetem Wertebereich: number, range, date, month, week, time und datetime-local. Bei Text-Feldern gibt es keine Unterschreitung eines Wertebereichs. Für zu kurze Zeichenketten ist stattdessen tooShort zuständig, das sich auf minlength bezieht.

Man greift auf die Eigenschaft über element.validity.rangeUnderflow zu. Das ist vor allem nützlich, wenn man eigene, gezielte Fehlermeldungen anzeigen will, statt sich auf die allgemeine Standardmeldung des Browsers zu verlassen. Oft kombiniert man sie mit setCustomValidity() oder mit einer eigenen Fehleranzeige im DOM.

Rückgabewert

Typ
boolean
Beschreibung
true, wenn der Wert kleiner als min ist, sonst false. Das gilt auch, wenn das Feld leer ist oder kein min gesetzt ist.

Beispiele

Einfache Prüfung eines Zahlenfelds

// HTML: <input id="alter" type="number" min="18">
const alter = document.querySelector('#alter');
alter.value = '16';

console.log(alter.validity.rangeUnderflow);
console.log(alter.checkValidity());
true false

Eigene Fehlermeldung bei zu frühem Datum

// HTML: <input id="termin" type="date" min="2024-01-01">
const termin = document.querySelector('#termin');

termin.addEventListener('input', () => {
  // Zuerst zurücksetzen, sonst bleibt das Feld dauerhaft ungültig
  termin.setCustomValidity('');
  if (termin.validity.rangeUnderflow) {
    termin.setCustomValidity(`Bitte ein Datum ab dem ${termin.min} wählen.`);
  }
  termin.reportValidity();
});

Formular-Validierung mit gezielter Fehlerausgabe

// HTML:
// <form id="bestellung" novalidate>
//   <input name="menge" type="number" min="1" max="99" required>
//   <span class="fehler"></span>
//   <button>Bestellen</button>
// </form>
const form = document.querySelector('#bestellung');
const menge = form.elements.menge;
const fehler = form.querySelector('.fehler');

const meldung = (el) => {
  const v = el.validity;
  if (v.valueMissing) return 'Bitte eine Menge angeben.';
  if (v.rangeUnderflow) return `Mindestens ${el.min} Stück.`;
  if (v.rangeOverflow) return `Höchstens ${el.max} Stück.`;
  return '';
};

form.addEventListener('submit', (event) => {
  const text = meldung(menge);
  fehler.textContent = text;
  if (text) event.preventDefault();
});

menge.value = '0';
console.log(meldung(menge));
Mindestens 1 Stück.

Dynamisch geändertes min-Attribut

const feld = document.createElement('input');
feld.type = 'number';
feld.value = '5';
console.log(feld.validity.rangeUnderflow); // kein min gesetzt

feld.min = '10';
console.log(feld.validity.rangeUnderflow); // wird sofort neu berechnet
false true

// Wichtig · Fallstricke

  • Leere Felder: Ist ein Feld leer, ist rangeUnderflow immer false. Pflichtfelder prüft man deshalb zusätzlich über required bzw. valueMissing.
  • Ungültiges min: Lässt sich der Wert im min-Attribut nicht auswerten (z. B. min=\"abc\" bei type=\"number\"), findet keine Prüfung statt und die Eigenschaft bleibt false.
  • type=\"range\": Schieberegler begrenzen ihren Wert selbst auf den erlaubten Bereich. Deshalb ist rangeUnderflow hier praktisch nie true.
  • Zeit mit Tageswechsel: Ist bei type=\"time\" min größer als max (z. B. 22:00–06:00), gilt der Bereich als über Mitternacht reichend. Die Prüfung verhält sich dann anders, als man es zunächst erwartet.
  • Nicht clientseitig allein prüfen: Eine Prüfung im Browser lässt sich leicht umgehen. Werte deshalb immer auch auf dem Server kontrollieren.
  • setCustomValidity() zurücksetzen: Eine eigene Fehlermeldung setzt customError auf true. Sie muss mit setCustomValidity('') wieder gelöscht werden, sonst bleibt das Feld ungültig.
  • Die Eigenschaft wird von allen modernen Browsern unterstützt.