Materiał edukacyjny · Informatyka JavaScript w przeglądarce · Moduł 07

MODUŁ 07

Pobieranie danych z kontrolek formularza

PPrezentacja dla nauczyciela

Formularze są głównym miejscem interakcji użytkownika ze stroną internetową. W tym module opanujesz precyzyjny odczyt danych z każdego typu kontrolki HTML: pól tekstowych i numerycznych, list rozwijanych, przycisków jednokrotnego wyboru oraz pól checkbox.

Odczyt pól tekstowych i numerycznych

Pola wprowadzania danych, takie jak <input type="text">, <input type="number"> czy wielowierszowe <textarea>, przechowują wpisaną przez użytkownika treść we właściwości value. Dostęp do niej uzyskujemy po pobraniu referencji do elementu za pomocą document.getElementById() lub document.querySelector().

Kluczową zasadą przy pracy z formularzami jest świadomość, że właściwość value zawsze zwraca ciąg znaków (typ string) — nawet wtedy, gdy znacznik posiada atrybut type="number". Próba wykonania operacji dodawania na nieprzekonwertowanych wartościach skończy się połączeniem tekstów (np. "15" + "10" da "1510" zamiast 25).

Przed wykonaniem obliczeń matematycznych wartość należy jawnie zrzutować na liczbę za pomocą Number(pole.value) lub parseFloat(pole.value). Przy prezentacji kwot i cen warto sformatować wynik do dwóch miejsc po przecinku za pomocą metody liczba.toFixed(2).

function obliczKosztPaliwa() {
  const litryPole = document.getElementById('iloscLitrow');
  const cenaPole = document.getElementById('cenaLitru');
  const wynik = document.getElementById('wynikPaliwa');

  const litry = Number(litryPole.value);
  const cena = Number(cenaPole.value);
  const razem = litry * cena;

  wynik.textContent = 'Koszt całkowity: ' + razem.toFixed(2) + ' zł';
}
1. Jakiego typu wartość zwraca pole input o atrybucie type="number" poprzez właściwość value?
2. W jaki sposób odczytać treść wpisaną przez użytkownika w wielowierszowym polu textarea o identyfikatorze opis?
3. Jaki będzie rezultat operacji '10' + 5, gdy wartość pobrana z pola input nie zostanie przekonwertowana funkcją Number?

Listy rozwijane i grupy opcji

Lista wyboru <select> udostępnia wybraną wartość bezpośrednio poprzez właściwość value całego elementu nadrzędnego. Wartość ta odpowiada atrybutowi value aktualnie zaznaczonego znacznika <option>. Nie ma potrzeby przeszukiwania tablicy opcji potomnych ani sprawdzania indeksów, jeśli zależy nam wyłącznie na odczytaniu zaznaczonego wariantu.

Przyciski jednokrotnego wyboru (<input type="radio">) tworzą grupę dzięki współdzieleniu tego samego atrybutu name. W danej chwili zaznaczony może być tylko jeden przycisk w grupie.

Najwygodniejszym i najbardziej niezawodnym sposobem pobrania wybranego przycisku radiowego jest użycie selektora CSS z pseudoklasą :checked w metodzie document.querySelector(), na przykład: document.querySelector('input[name="nazwaGrupy"]:checked'). Zwrócony element reprezentuje zaznaczoną opcję, z której odczytujemy właściwość value.

function podsumujWysylke() {
  const listaUslug = document.getElementById('usluga');
  const kosztWysylki = Number(listaUslug.value);

  const wybraneOpakowanie = document.querySelector('input[name="opakowanie"]:checked');
  const kosztOpakowania = Number(wybraneOpakowanie.value);

  const suma = kosztWysylki + kosztOpakowania;
  const wynik = document.getElementById('wynikKosztu');
  wynik.textContent = 'Łączny koszt zamówienia: ' + suma + ' zł';
}
4. W jaki sposób odczytać aktualnie wybraną wartość z elementu select o identyfikatorze miasto?
5. Jak pobrać zaznaczony przycisk radiowy z grupy o atrybucie name="rozmiar"?
6. Co sprawia, że w grupie przycisków radiowych użytkownik może zaznaczyć wyłącznie jedną opcję naraz?

Obsługa pól wyboru (checkbox)

Pola wielokrotnego wyboru (<input type="checkbox">) służą do włączania i wyłączania niezależnych opcji (np. dodatkowych usług czy akceptacji regulaminu). Do badania ich aktualnego stanu służy wyłącznie właściwość checked, która przyjmuje wartość logiczną true lub false.

Częstym błędem jest próba odczytywania stanu zaznaczenia poprzez właściwość value. Wartość pole.value w przypadku checkboxa zwraca stałą treść atrybutu (domyślnie ciąg "on"), niezależnie od tego, czy użytkownik zaznaczył pole, czy pozostawił je puste.

Podliczając zamówienie z wieloma opcjami, sprawdzamy stan poszczególnych kontrolek za pomocą prostych instrukcji warunkowych if (pole.checked) i dodajemy odpowiednie kwoty do sumy cząstkowej. Jeśli w formularzu znajduje się wiele pozycji tej samej kategorii, możemy również pobrać wszystkie zaznaczone pola za pomocą document.querySelectorAll('input[type="checkbox"]:checked').

function policzUslugiMyjni() {
  let koszt = 0;

  const mycie = document.getElementById('myciePodstawa');
  const wosk = document.getElementById('woskowanie');
  const wnetrze = document.getElementById('odkurzanie');

  if (mycie.checked) {
    koszt += 30;
  }
  if (wosk.checked) {
    koszt += 20;
  }
  if (wnetrze.checked) {
    koszt += 15;
  }

  const wynik = document.getElementById('podsumowanieMyjni');
  wynik.textContent = 'Koszt wybranych usług: ' + koszt + ' zł';
}
7. Która właściwość elementu checkbox w JavaScript informuje, czy pole jest aktualnie zaznaczone?
8. Dlaczego sprawdzanie warunku poleCheckbox.value == true jest powszechnym błędem logicznym?
9. Jak pobrać listę wszystkich aktualnie zaznaczonych pól wyboru o klasie dodatek?

Ćwiczenia