Prośba o nakierowanie w stopPropagination, preventDefaul i r


(Cracks7) #1

Witam. Czy mógłbym mieć tą przyjemność i poprosić Was o wytłumaczenie w nurtującej mnie kwestii odnośnie JS/jQuery? Chciałbym się dowiedzieć o co chodzi z propagacją zdarzeń w JS/jQuery. Chciałbym się dowiedzieć kiedy stosujemy preventDefault, kiedy stopPrepagination a kiedy return. Czy mogę liczyć na Twoje objaśnienie i ewentualne podesłąnie do polsko języcznych materiałów na ten temat?

Z góry dziękuje i pozdrawiam


(Howks0) #2

Propagacja zdarzeń, to tzw. bąbelkowa obsługa zdarzeń. Wyobraź sobie butelkę piwa, gdzie bąbelek leci od samego dna po kapsel. Identycznie działa obsługa zdarzeń JS w przeglądarkach.

Najprostszy przykład: masz 4 divy i one zagnieżdżają się w sobie. Na każdego diva masz zapięte jakieś tam zdarzenie na click'a. Po cyknięciu w środek tych zagnieżdżonych divów, przeglądarka tworzy jakby "bąbelek" zdarzeniowy, który leci od najbardziej zagnieżdżonego elementu w kierunku samej góry. Czyli po tym jednym kliku, bąbelek wywoła wszystkie zdarzenia click elementów, które napotka na swojej drodze, czyli w moim przykładzie tych 4 divów.

preventDefault, stopPrepagination i return są ściśle powiązane z "bąbelkowaniem" :slight_smile:

preventDefault

Nie wykonuje (anuluje) domyślnego zdarzenia dla danego elementu. Zazwyczaj stosuje się gdy masz zapięte zdarzenie click na elemencie . Po kliknięciu na wykonuje się Twoje zdarzenie i gdy parser napotka preventDefault nie wykonuje domyślnej akcji dla czyli nie zostanie wykonane przejście do URL'a, którego masz w "href" tego .

stopPrepagination

Po prostu zatrzymuje bąbelkowanie :). Czyli w powyższym moim przykładzie 4 divów. Gdy dodasz do 2go diva w obsłudze zdarzenia stopPrepagination bąbelek nie pójdzie już w górę (zatrzymuje się) i zdarzenia dla pozostałych 2 divów w ogóle "nie zaskoczą".

return

To dosłownie połączenie preventDefault + stopPrepagination. Czyli return zatrzymuje bąbelkowanie i anuluje dalsze domyślne zdarzenia.