pehaperowiec
27.02.2013, 20:35:42
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
thek
28.02.2013, 09:02:45
preventDefault - zablokowanie wykonania się domyślnej akcji, czyli przykładowo po kliknięciu w link, nie nastąpi przejście do strony wskazywanej przez href odnośnika
stopPropagation - zatrzymanie przekazywania akcji do elementów nadrzednych. Część zdarzeń bowiem po swoim odpaleniu "idzie w górę" hierarchii DOM, aż trafi na taki element, który przechwyci to zdarzenie.
return - to zwykłe zwrócenie wartości funkcji. Dość często jednak stosuje się je w określonym celu. Przykładowo wrzucenie return false; powoduje zwrocenie niepowodzenia akcji. W niektórych sytuacjach jest to równoznaczne z preventDefault, ale to już kwestia kontekstu wywołania.
pehaperowiec
28.02.2013, 09:35:36
Cytat
W niektórych sytuacjach jest to równoznaczne z preventDefault, ale to już kwestia kontekstu wywołania.
czy mógłbyś to rozwinąć?
i nieco jaśniej napisac o stopPropagination?
thek
28.02.2013, 12:00:25
Return, jak to return przerywa ciąg aktualnych instrukcji i zwraca kierowanie do elementu wywołującego. Jest to przykładowo wykorzystywane właśnie w zdarzeniach click linków. Gdy coś jest dla niego zdefiniowane w tej akcji, możemy po ich wykonaniu wpisać return false. Tym samym ciąg instrukcji ulega zatrzymaniu i powrotowi do elementu wywołujacego. Do mającego nastapić przekierowania nie dochodzi więc nigdy.
Co do stopPropagation... Zdarzenia dzielą się na 2 typy. Te, których działaniu podlega tylko element wywołujacy, oraz takie, których wywołanie przechodzi na przodków, aż znajdzie element, który je przechwyci. Przykładem pierwszego jest blur(). Gdy element traci zaznaczenie, odpala się zdarzenie blur() dla niego. I tyczy ono tylko tegoż elementu. Przykładem drugiego jest wspomniany już tyle razy click(). Po kliknięciu w jakiś element strony następuje dopasowanie możliwie najgłębszego poziomu. Jeśli element nie obsługuje clicka, sprawdzany jest rodzic. Jeśli tu nie ma przechwytu, zdarzenie idzie do dziadka i tak brnie w górę aż do roota strony. stopPropagation blokuje dalsze rzucanie najbliższemu rodzicowi.
pehaperowiec
28.02.2013, 12:39:03
No dobrze ale jak to się ma do jQuery? Mógłbyś zaprezentować pare przykładów z tymi metodami dla rozjaśnienia całej sytuacji?
viking
28.02.2013, 13:17:27
Ostatnio pisałem coś co powinno Ci pomóc:
Zdarzenia jQuery live delegate onDo tego na stronie jquery masz całkiem niezłe tutoriale.
thek
28.02.2013, 13:32:49
Ale co tu jest do wyjaśniania z jQuery? W zasadzie przykłady masz po wpisaniu w google nazwy funkcji z jQuery jako dopiskiem. Do tego po jednym przykladzie w dokumentacji samego jQuery. Tak więc wybacz, ale mogę wyjaśnić jak coś działa, bo nie zawsze jest to jasno wytłumaczone. Tyle że ja już napisałem niemal jak krowie na rowie. Reszta już nie powinna być problemem. Przecież nie wezmę łopaty by wykopać rów intelektualny, do którego bym wszedł byś mógł widzieć co mówię. No wybacz, ale nawet nie ruszyłes palcem by zerknąć w przykłady dostępne w sieci, których jest od zatrzęsienia. Mam rzucać linkami czy przeklejonymi przykładami? Bądźmy choć trochę poważni.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.