JavaScriptDOM i zdarzenia

EventTarget.addEventListener()

Rejestruje funkcję wywoływaną za każdym razem, gdy na elemencie wystąpi zdarzenie, np. kliknięcie.

Zwraca
undefined
Na tej stronie

Przykład

#
JavaScript
const button = document.querySelector('#like')
let likes = 0

button.addEventListener('click', () => {
  likes += 1
  button.textContent = `Polubienia: ${likes}`
  console.log('Kliknięto, polubienia:', likes)
})

button.click()
button.click()
Konsola
Kliknięto, polubienia: 1
Kliknięto, polubienia: 2

Dwa ostatnie wiersze symulują kliknięcia przez button.click(), żeby wynik pojawił się od razu. Kliknij przycisk w podglądzie, a w konsoli pojawią się kolejne wpisy.

Definicja i zastosowanie

#

Metoda addEventListener() łączy zdarzenie z funkcją obsługi. Pierwszy argument to typ zdarzenia (np. "click", "input", "submit", "keydown"), a drugi to funkcja, która dostanie obiekt zdarzenia z informacjami o tym, co się stało.

Na jednym elemencie możesz zarejestrować wiele funkcji dla tego samego zdarzenia. Wykonają się w kolejności dodania. Metoda działa na elementach, ale też na document i window, np. przy obsłudze skrótów klawiszowych albo zmiany rozmiaru okna.

Trzeci argument to obiekt opcji: once: true usuwa obsługę po pierwszym wywołaniu, passive: true informuje przeglądarkę, że funkcja nie zablokuje przewijania, a signal pozwala odpiąć obsługę przez AbortController. Obsługę usuniesz też metodą removeEventListener(), ale musisz przekazać do niej tę samą funkcję, więc funkcja anonimowa się do tego nie nada.

Składnia

#
Składnia
target.addEventListener(type, listener)
target.addEventListener(type, listener, options)

target.removeEventListener(type, listener)

Parametry

#
  • type

    napis

    Typ zdarzenia, np. "click", "input", "submit" albo "keydown". Bez przedrostka on.
  • listener

    function (event)

    Funkcja wywoływana przy każdym wystąpieniu zdarzenia. Dostaje obiekt zdarzenia.
  • options

    opcjonalny obiekt

    Ustawienia: once, passive, capture i signal.

Więcej przykładów

#
Obsługa tylko raz
JavaScript
const bonus = document.querySelector('#bonus')

bonus.addEventListener('click', () => console.log('Bonus odebrany: +50 monet'), { once: true })

bonus.click()
bonus.click()
Konsola
Bonus odebrany: +50 monet
Zdarzenie input w polu tekstowym
JavaScript
const input = document.querySelector('#nick')

input.addEventListener('input', (event) => {
  console.log(`Wpisano: ${event.target.value}`)
})

input.value = 'Ania'
input.dispatchEvent(new Event('input'))
Konsola
Wpisano: Ania

Zdarzenie input pojawia się przy każdej zmianie treści pola. Tutaj wywołujemy je ręcznie przez dispatchEvent(), a gdy wpiszesz coś w pole w podglądzie, konsola pokaże kolejne wartości.

Usuwanie obsługi
JavaScript
const button = document.querySelector('#hint')
let used = 0

function showHint() {
  used += 1
  console.log(`Podpowiedź ${used} z 2`)
  if (used === 2) button.removeEventListener('click', showHint)
}

button.addEventListener('click', showHint)

button.click()
button.click()
button.click()
Konsola
Podpowiedź 1 z 2
Podpowiedź 2 z 2

Obsługa przeglądarek

#

Szeroko dostępne

Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.

  • Chrome
  • Edge
  • Firefox
  • Safari

Dobre praktyki

#
  • Przekazuj funkcję, a nie jej wynik: addEventListener("click", save), a nie addEventListener("click", save()).
  • Zamiast dodawać obsługę do każdego z wielu elementów, dodaj jedną do wspólnego rodzica i sprawdzaj event.target. To tak zwane delegowanie zdarzeń.
  • Jeśli planujesz usunąć obsługę, zapisz funkcję w zmiennej. removeEventListener() potrzebuje dokładnie tej samej funkcji.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.