Event listenery w JavaScript: click, submit, scroll i delegacja

Event listenery w JavaScript

Event listenery w JavaScript: click, submit, scroll | We.Inc

Zobacz, jak zdarzenia pojawiają się w logu na żywo, a potem skopiuj wzorce addEventListener dla click, submit, scroll, delegacji, once, passive i sprzątania przez AbortController.

Event listener to funkcja, którą przeglądarka wywołuje, gdy coś dzieje się z elementem, na przykład kliknięcie, wysłanie formularza lub przewijanie. Dodajesz go przez element.addEventListener(type, handler, options). Obiekt options włącza once, passive, capture lub sygnał przerwania, a removeEventListener później odłącza tę samą funkcję.

Opcje addEventListener

Zdarzenia łatwiej zrozumieć, gdy je widać. Poniższy log zdarzeń zapisuje każde wywołanie listenera w małym obszarze testowym, więc możesz klikać, pisać, wysyłać i przewijać, obserwując kolejność, cel i efekt każdej opcji. Potem skopiuj wzorce do zadań, które naprawdę masz.

Najczęściej zadawane pytania

Czym jest delegacja zdarzeń?

Zamiast dodawać listener do każdego elementu, dodajesz jeden do wspólnego rodzica. Ponieważ większość zdarzeń bąbelkuje w górę, rodzic słyszy kliknięcia wszystkich swoich dzieci, także tych dodanych później, i używa event.target, by ustalić, które zostało kliknięte.

Dlaczego removeEventListener nie usuwa mojego listenera?

Musi dostać tę samą referencję do funkcji i to samo ustawienie capture, które dostał addEventListener. Dwie funkcje strzałkowe o identycznym kodzie to nadal różne funkcje, więc zdefiniuj handler raz i przekaż tę zmienną za każdym razem.

Co robi passive: true?

Informuje przeglądarkę, że Twój handler nie wywoła preventDefault, więc strona może zacząć przewijać się od razu, zamiast czekać na zakończenie Twojego kodu. Przeglądarki domyślnie ustawiają passive dla listenerów wheel i touch na window, document i body.

Czym różni się target od currentTarget?

target to najgłębiej położony element, w którym zdarzenie się zaczęło, i pozostaje taki sam podczas bąbelkowania. currentTarget to element, którego listener działa w tej chwili, i zmienia się na każdym poziomie.

Czy form.submit() wywołuje zdarzenie submit?

Nie. Wywołanie form.submit() ze skryptu pomija zdarzenie submit i walidację. Wywołaj form.requestSubmit(), gdy chcesz, aby uruchomiły się Twoje listenery submit i wbudowane sprawdzenia.

addEventListener czy onclick?

Właściwość onclick przechowuje jedną funkcję, więc przypisanie drugiej zastępuje pierwszą. addEventListener pozwala kilku niezależnym listenerom dzielić element i obsługuje obiekt options, więc to lepszy domyślny wybór.

Jak podróżuje zdarzenie

Przewijanie bez spowalniania strony

Sprzątanie listenerów

Typy zdarzeń, których użyjesz najczęściej

Popularne zdarzenia i gdzie ich nasłuchiwać

Wzorce do skopiowania

Kliknięcie z nazwanym handlerem, który można usunąć

Trzymanie funkcji w zmiennej sprawia, że removeEventListener działa.

Obsługa wysłania formularza bez przeładowania

preventDefault zatrzymuje nawigację przeglądarki. event.submitter mówi, którego przycisku wysyłania użyto.

Delegacja zdarzeń na liście

Jeden listener na liście obsługuje każdy przycisk usuwania, także wiersze dodane po załadowaniu strony.

Pasywny listener scroll ograniczony do jednej aktualizacji na klatkę

passive: true pozwala przewijaniu zacząć się od razu, a requestAnimationFrame ogranicza pracę do raz na klatkę.

once i AbortController

Pierwszy listener działa jeden raz. Pozostałe są usuwane razem jednym wywołaniem abort().

Skrót klawiszowy, który ignoruje pisanie w polach

Sprawdzenie celu sprawia, że skrót nie zadziała, gdy ktoś wpisuje ukośnik w polu wyszukiwania.

click na przycisku: target {target}

(once: teraz usunięty)

click dotarł do obszaru testowego (faza {phase}): target {target}, currentTarget {current}

input: wartość to teraz "{value}"

change: wartość zatwierdzona

submit na formularzu, submitter {submitter}; preventDefault zatrzymał przeładowanie

scroll (pasywny, raz na klatkę): scrollTop {n}

delegowany click na liście: element {item}

listener na elemencie: {item}

Log zdarzeń na żywo

Klikaj, pisz, wysyłaj i przewijaj w obszarze testowym. Każde wywołanie listenera trafia do logu z typem, celem i bieżącym celem.

Opcje listenera

once na przycisku

capture na obszarze

delegacja na liście

Kliknij mnie

Pisz tutaj

Wyślij

Lista z delegacją

Dodaj element listy

Element {n}

Pole przewijania

Linia przewijania {n}

Log (najnowsze na górze)

Wyczyść log

Brak zdarzeń.

Zacznij za darmo · Bez karty kredytowej

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony