Signatur
Beschreibung
Die Eigenschaft max spiegelt das HTML-Attribut max eines <progress>-Elements. Sie legt fest, welcher Wert von value für „100 % erledigt“ steht. Die untere Grenze ist immer 0 und lässt sich nicht ändern. Die Eigenschaft ist vom Typ double. Fehlt das Attribut oder ist es ungültig, liefert sie 1.
Praktisch ist max, wenn der Fortschritt in echten Einheiten angezeigt werden soll, statt ihn vorher in einen Bruch zwischen 0 und 1 umzurechnen. Beispiele sind die Gesamtgröße eines Uploads in Bytes, die Zahl der Schritte in einem Assistenten oder die Länge eines Videos in Sekunden. Der Browser berechnet den Füllstand dann selbst als value / max. Das Ergebnis steht auch in der schreibgeschützten Eigenschaft position.
Zu beachten:
- Nur positive Werte werden übernommen. Setzt man
0oder einen negativen Wert, wird die Zuweisung stillschweigend ignoriert und der bisherige Wert bleibt erhalten. Nicht endliche Werte wieNaNoderInfinitylösen einenTypeErroraus. valuewird aufmaxbegrenzt. Ist das Attributvaluegrößer alsmax, liefert die Eigenschaftvalueden Wert vonmax. Das Attribut selbst bleibt unverändert.- Wenn man
maxsetzt, bleibt ein unbestimmter Fortschrittsbalken (ohne Attributvalue) unbestimmt. Bestimmt wird er erst, wennvaluegesetzt wird.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $newValue | number | 1 | Nur beim Setzen: neue obere Grenze. Muss endlich und größer als 0 sein. Der Wert wird als Attribut max ins HTML zurückgeschrieben. |
Rückgabewert
1 zurückgegeben.Beispiele
Standardwert und Zusammenspiel mit value
const bar = document.createElement('progress');
console.log(bar.max); // kein Attribut -> Standardwert
bar.max = 200;
bar.value = 50;
console.log(bar.position); // 50 / 200
bar.value = 500; // größer als max
console.log(bar.value); // wird auf max begrenzt
console.log(bar.getAttribute('max'));
Upload-Fortschritt in Bytes anzeigen
// HTML: <input type="file" id="file"> <progress id="upload"></progress>
const input = document.querySelector('#file');
const bar = document.querySelector('#upload');
input.addEventListener('change', () => {
const file = input.files[0];
if (!file) return;
const xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', (event) => {
if (event.lengthComputable) {
bar.max = event.total; // Gesamtgröße in Bytes
bar.value = event.loaded; // bereits übertragene Bytes
}
});
xhr.upload.addEventListener('load', () => console.log('Upload fertig'));
xhr.open('POST', '/api/upload');
xhr.send(file);
});
Assistent mit Schritten und ungültige Zuweisungen
const steps = ['Konto', 'Adresse', 'Zahlung', 'Bestätigung'];
const bar = document.createElement('progress');
bar.max = steps.length;
const goTo = (index) => {
bar.value = index + 1;
bar.textContent = `Schritt ${index + 1} von ${bar.max}`; // Fallback-Text
};
goTo(1);
console.log(bar.textContent);
bar.max = 0; // wird ignoriert
bar.max = -5; // wird ebenfalls ignoriert
console.log(bar.max);
try {
bar.max = NaN;
} catch (err) {
console.log(err.name);
}
// Wichtig · Fallstricke
- Stilles Ignorieren: Die Zuweisung von
0oder negativen Zahlen wirft keinen Fehler, bewirkt aber nichts. Wermaxaus einer Berechnung übernimmt, etwaevent.totalbei einer leeren Datei, sollte den Wert vorher prüfen. NaN/Infinitylösen einenTypeErroraus. Deshalb Werte aus Formularfeldern mitNumber()umwandeln und mitNumber.isFinite()prüfen.- Wird
maxunter den aktuellen Wert vonvaluegesetzt, zeigt der Balken 100 %. Das Attributvaluebehält trotzdem seinen ursprünglichen Wert. Das kann beim Auslesen mitgetAttribute('value')überraschen. - Einen unbestimmten Zustand (animierter Balken) erreicht man nicht über
max, sondern mitbar.removeAttribute('value'). - Barrierefreiheit: Das Element meldet Screenreadern seinen Fortschritt selbst. Sinnvoll ist trotzdem ein zugehöriges
<label>oderaria-label. - Wird von allen modernen Browsern unterstützt, im Internet Explorer ab Version 10.