MODUŁ 06
Obsługa zdarzeń i interakcja użytkownika
PPrezentacja dla nauczyciela
W tym module nauczysz się reagować na akcje użytkownika na stronie: poznasz dwa sposoby rejestrowania zdarzeń (przez atrybut onclick w HTML oraz metodę addEventListener) i dowiesz się, jak aktualizować interfejs na żywo przy zmianie kontrolek formularza.
Podpinanie zdarzenia przez atrybut onclick w HTML
Zdarzenie (event) to sygnał informujący przeglądarkę, że zaszła określona akcja użytkownika — na przykład kliknięcie przycisku, naciśnięcie klawisza lub zmiana zaznaczenia pola wyboru.
Najprostszą i powszechnie stosowaną metodą powiązania elementu strony z kodem JavaScript jest użycie atrybutu zdarzenia bezpośrednio w znaczniku HTML. Dla kliknięcia myszą służy atrybut onclick:
<button onclick="zareagujNaKlikniecie()">Oblicz</button>
Wartość atrybutu onclick to instrukcja wywołania funkcji (wraz z nawiasami okrągłymi). Sama definicja funkcji znajduje się w dołączonym zewnętrznym pliku skrypt.js:
function zareagujNaKlikniecie() {
// kod wykonywany po kliknięciu przycisku
}
Wielką zaletą tego zapisu jest możliwość bezpośredniego przekazywania stałych argumentów z poziomu HTML. Jeżeli mamy kilka przycisków wybierających warianty (np. kolory lub stawki), każdy przycisk może przekazać własną wartość do tej samej funkcji: onclick="ustawKolor('#b91c1c', 'Czerwony')".
W poniższym przykładzie trzy przyciski wywołują funkcję ustawKolor(), dynamicznie zmieniając obramowanie i komunikat w ramce podglądu. Przetestuj działanie przycisków:
function ustawKolor(kodHex, nazwaKoloru) {
const ramka = document.getElementById("ramkaPodgladu");
ramka.style.borderColor = kodHex;
ramka.style.color = kodHex;
ramka.textContent = "Wybrano kolor: " + nazwaKoloru;
}
Rejestracja zdarzeń przez metodę addEventListener
Drugim standardowym sposobem obsługi interakcji jest rejestracja tzw. nasłuchiwacza zdarzeń (event listener) w całości po stronie kodu JavaScript, z zachowaniem czystego kodu HTML bez dodatkowych atrybutów.
Służy do tego metoda addEventListener() wywoływana na pobranym obiekcie elementu DOM:
const przycisk = document.getElementById("mojPrzycisk");
przycisk.addEventListener("click", zareagujNaKlikniecie);
Metoda przyjmuje dwa podstawowe argumenty:
- Nazwa zdarzenia: jako łańcuch znaków bez przedrostka „on” — czyli piszemy
"click",a nie"onclick". - Funkcja obsługująca (callback): nazwa funkcji przekazana jako referencja — bez nawiasów okrągłych. Zapisanie nawiasów
zareagujNaKlikniecie()spowodowałoby natychmiastowe uruchomienie funkcji w momencie wczytywania skryptu, a nie po kliknięciu!
Zaletą addEventListener() jest możliwość przypisania wielu niezależnych funkcji do tego samego zdarzenia na jednym elemencie oraz całkowite odseparowanie struktury HTML od logiki programistycznej.
W poniższym przykładzie rejestrujemy nasłuchiwacz kliknięcia za pomocą addEventListener(), który zlicza naciśnięcia przycisku. Kliknij przycisk i zaobserwuj wzrost licznika:
let licznik = 0;
function zwiekszLicznik() {
licznik += 1;
const wynik = document.getElementById("licznikKlikniec");
wynik.textContent = "Liczba kliknięć: " + licznik;
}
const przycisk = document.getElementById("przyciskLicznika");
przycisk.addEventListener("click", zwiekszLicznik);
Zdarzenia kontrolek formularza: change i input
Oprócz kliknięć myszą (click) w aplikacjach internetowych kluczowe znaczenie ma obsługa zdarzeń generowanych przez kontrolki formularzy:
change— odpala się w momencie, gdy wartość kontrolki ulegnie zmianie i zmiana ta zostanie zatwierdzona. W przypadku list rozwijanych<select>oraz pól wyboru (checkbox, radio) zdarzenie zachodzi natychmiast po zmianie wyboru. W przypadku pól tekstowych zdarzeniechangeodpala się dopiero wtedy, gdy użytkownik zakończy wpisywanie i opuści pole (straci ono tzw. focus).input— odpala się natychmiast przy każdej pojedynczej modyfikacji wartości. Jest to idealne zdarzenie do obsługi suwaków zakresu (<input type="range">) oraz pól wyszukiwania, gdzie chcemy dynamicznie aktualizować widok w czasie rzeczywistym podczas pisania lub przeciągania suwaka.blur— odpala się w chwili, gdy kontrolka traci focus (kursor opuszcza pole), co często wykorzystuje się do walidacji pojedynczego pola lub aktualizacji paska postępu.
Suwak budżetu reaguje na zdarzenie input i na bieżąco wyświetla aktualną kwotę.
Przesuń suwak w edytorze i zaobserwuj natychmiastową reakcję:
function aktualizujBudzet() {
const suwak = document.getElementById("suwakBudzetu");
const wyswietlacz = document.getElementById("wyswietlacz");
wyswietlacz.textContent = suwak.value + " zł";
}
const suwak = document.getElementById("suwakBudzetu");
suwak.addEventListener("input", aktualizujBudzet);
Ćwiczenia
- 1Podpięcie funkcji do przycisku przez onclickZdefiniuj funkcję w skrypcie, która jest wywoływana przez atrybut onclick w HTML.Zadanie i podpowiedzi →
- 2Przekazywanie argumentu z onclickOdbierz argument przekazany w wywołaniu funkcji z atrybutu onclick w HTML.Zadanie i podpowiedzi →
- 3Rejestracja zdarzenia przez addEventListenerZarejestruj nasłuchiwacz kliknięcia w czystym kodzie JavaScript bez modyfikowania HTML.Zadanie i podpowiedzi →
- 4Licznik kliknięć przyciskuZwiększaj wartość licznika o jeden przy każdym naciśnięciu przycisku.Zadanie i podpowiedzi →
- 5Przycisk czyszczenia pola formularzaWyczyść zawartość pola tekstowego po kliknięciu dedykowanego przycisku.Zadanie i podpowiedzi →
- 6Kopiowanie tekstu z pola do akapituOdczytaj wpisany tekst i wyświetl go w akapicie po kliknięciu przycisku.Zadanie i podpowiedzi →
- 7Interaktywny kalkulator dodawaniaZsumuj wartości z dwóch pól wejściowych po naciśnięciu przycisku Oblicz.Zadanie i podpowiedzi →
- 8Podgląd na żywo ze zdarzeniem inputAktualizuj akapit na bieżąco podczas wpisywania znaków za pomocą zdarzenia input.Zadanie i podpowiedzi →
- 9Obsługa suwaka zakresu rangeOdczytuj i wyświetlaj bieżącą wartość suwaka range przy zdarzeniu input.Zadanie i podpowiedzi →
- 10Wybór opcji z listy select ze zdarzeniem changeZareaguj na zmianę wyboru w liście rozwijanej za pomocą zdarzenia change.Zadanie i podpowiedzi →
- 11Stan pola wyboru checkbox i zdarzenie changeSprawdź właściwość checked pola checkbox po wystąpieniu zdarzenia change.Zadanie i podpowiedzi →
- 12Walidacja pola przy opuszczeniu focusu blurWyświetl ostrzeżenie, gdy użytkownik opuści puste pole tekstowe.Zadanie i podpowiedzi →
- 13Przełącznik stanu togglePrzełączaj stan aplikacji między Włączony a Wyłączony przy kolejnych kliknięciach.Zadanie i podpowiedzi →
- 14Dwa przyciski: zwiększ i zmniejszObsłuż dwa niezależne przyciski modyfikujące tę samą zmienną liczbową.Zadanie i podpowiedzi →
- 15Dynamiczne przeliczanie kwoty na inputAktualizuj łączny koszt zamówienia natychmiast przy zmianie liczby sztuk.Zadanie i podpowiedzi →
- 16Kompleksowy kalkulator usług z walidacjąPołącz select, input liczbowy, przycisk i generowanie raportu z walidacją.Zadanie i podpowiedzi →