Element <output> to znacznik HTML5 przeznaczony do wyświetlania wyników obliczeń oraz wartości wyjściowych powiązanych z formularzami. Sprawdza się wszędzie tam, gdzie dane wejściowe użytkownika mają natychmiast wpływać na prezentowany wynik.
Element <output> reprezentuje wynik obliczeń i umożliwia jego dynamiczną prezentację w interfejsie.
Podstawowe zastosowanie
Element <output> najczęściej służy do wyświetlania wartości obliczonych na podstawie danych z pól formularza. W połączeniu ze zdarzeniem oninput pozwala aktualizować wynik w czasie rzeczywistym, bez przeładowania strony.
Najprostszy przykład to kalkulator dodawania:
<form onsubmit="return false" oninput="o.value = parseFloat(a.value) + parseFloat(b.value)">
<input name="a" type="number" step="any"> +
<input name="b" type="number" step="any"> =
<output name="o"></output>
</form>
W tym przykładzie element <output> z atrybutem name="o" wyświetla sumę wartości z pól a i b. Każda zmiana w polach wejściowych natychmiast przelicza i prezentuje nowy wynik.
Atrybuty elementu <output>
Najważniejsze atrybuty i ich rola to:
for– rozdzielana spacjami lista identyfikatorów pól wejściowych, które wpływają na wynik; wspiera dostępność, jednoznacznie wskazując źródła danych;name– nazwa elementu, która umożliwia jego identyfikację w JavaScript oraz w obrębie formularza;form– identyfikator powiązanego formularza, który pozwala umieścić<output>poza<form>i nadal zachować powiązanie.
Przykład użycia atrybutu for z jawnie powiązanymi polami wejściowymi:
<form onsubmit="return false" oninput="o.value = parseFloat(a.value) + parseFloat(b.value)">
<input name="a" id="a" type="number" step="any"> +
<input name="b" id="b" type="number" step="any"> =
<output name="o" for="a b"></output>
</form>
Przykład powiązania elementu output z formularzem za pomocą atrybutu form:
<form id="kalkulator" onsubmit="return false" oninput="wynik.value = parseInt(liczba1.value) + parseInt(liczba2.value)">
<input id="liczba1" type="number">
<input id="liczba2" type="number">
</form>
<output name="wynik" form="kalkulator" for="liczba1 liczba2"></output>
Praktyczne przykłady
Kalkulator wynagrodzeń (brutto z VAT)
Bardziej zaawansowany przykład obliczania kwoty całkowitej uwzględniającej VAT wygląda następująco:
<form onsubmit="return false" oninput="document.querySelector('output').value = (hours.valueAsNumber * rate.valueAsNumber * (1 + vat.valueAsNumber)).toFixed(2)">
<p><label for="hours">Liczba godzin: </label>
<input type="number" min="0" id="hours" name="hours"></p>
<p><label for="rate">Stawka: </label>
<span>PLN</span><input type="number" min="0" id="rate" name="rate"></p>
<p><label for="vat">VAT: </label>
<input type="number" min="0" id="vat" value="0.23" name="vat"></p>
<p>Suma: <strong><output name="amount" for="hours rate vat">0</output> PLN</strong></p>
</form>
Suwak z wyświetleniem poziomu umiejętności
Poniżej przykład wykorzystujący <input type="range"> do prezentacji wartości na żywo:
<form onsubmit="return false" oninput="level.value = flevel.valueAsNumber">
<label for="flying">Wysoki poziom umiejętności</label>
<input name="flevel" id="flying" type="range" min="0" max="100" value="0">
<output for="flying" name="level">0</output>/100
</form>
Zastosowanie valueAsNumber zamiast parseInt
Podczas bardziej zaawansowanych obliczeń warto używać właściwości valueAsNumber zamiast funkcji parseInt lub parseFloat. Automatycznie konwertuje ona wartość pola na liczbę, eliminując potrzebę ręcznej konwersji typów i zmniejszając ryzyko błędów:
<form onsubmit="return false" oninput="o.value = a.valueAsNumber + b.valueAsNumber">
<input name="a" id="a" type="number" step="any"> +
<input name="b" id="b" type="number" step="any"> =
<output name="o" for="a b"></output>
</form>
JavaScript i dynamiczne obliczenia
Aktualizację elementu <output> można przeprowadzać także bezpośrednio z poziomu JavaScript, manipulując jego zawartością:
<form onsubmit="return false" oninput="document.getElementById('o').innerHTML = parseFloat(document.getElementById('a').value) + parseFloat(document.getElementById('b').value)">
<input name="a" id="a" type="number" step="any"> +
<input name="b" id="b" type="number" step="any"> =
<output name="o" id="o" for="a b"></output>
</form>
Takie podejście daje większą elastyczność w formatowaniu i prezentacji wyniku (np. dodanie jednostek, ikon lub wyróżnień).
Zastosowania w praktyce
Element <output> jest idealny dla formularzy, które wymagają natychmiastowych wyników obliczeń. Najczęstsze scenariusze użycia to:
- kalkulatory cen i rabatów,
- konwersje walut i jednostek miary,
- wizualizacja zmian wartości w czasie rzeczywistym,
- wyświetlanie wyników wyszukiwania lub filtrowania danych,
- potwierdzanie i podgląd danych przed wysłaniem formularza.
Kluczową zaletą <output> jest jego semantyczne znaczenie – informuje przeglądarkę i technologie asystujące, że zawartość to wynik obliczeń, a nie zwykły tekst. Dzięki atrybutowi for można jawnie powiązać dane wejściowe z wynikiem, co znacząco poprawia dostępność interfejsu.