![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 1.02.2010 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Witam serdecznie,
Posiadam następujący, przykładowy kod: oraz zdarzenie (wstępnie):
Chciałbym aby po kliknięciu na blok #rodzic lub każdy #losoweid i wszystkich zagnieżdżonych w nich lub równoległych poziomem do nich, wykonywała się taka sama akcja jak wyżej czyli tworzenie potomnego bloku. Poziom, w którym byłby dopisany zależałby od klikniętego bloku. Problem w tym, że gdy nawet zmienię selektor na $("#container > div") gdy klikam na "rodzic" lub "losoweid" wykonuje się automatycznie ta sama akcja dla rodzica. Jednocześnie nie mogę pozbawić rodzica eventu gdyż może się przydać po kliknięciu na niego. Próbowałem metod: 1) umieszczenia nazwanego eventu click po append() ale nie odczytuje akcji 2) korzystania z funkcji delegate 3) korzystania z funkcji live() 4) korzystania z regexp w selektorze dla wszystkich div, ale wtedy akcja wywołuje się rekurencyjnie do bólu. 5) unbind Naturalnie nie wchodzi w grę dopisywanie ręczne definicji akcji dla każdego ID. Fakt, że mogłem rozwiązań j/w użyć nieumiejętnie, więc proszę o pomoc. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 782 Pomógł: 153 Dołączył: 21.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli dobrze kojarzę
Dodaj jeszcze warunkowe wykonanie zdarzenia w zależności od rodzaju klikniętego curObj. -------------------- Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]! |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 1.02.2010 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Hmm pomysł ciekawy, ale niestety nie działa.
Jako selektora użyłem zarówno rodzic jak i wszystkie div'y dzieci.
W każdej sytuacji objId zawsze ma wartość "#rodzic". obj jest typu object. [Object] object :/ |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 640 Pomógł: 28 Dołączył: 13.02.2003 Skąd: Międzyrzecz/Poznań Ostrzeżenie: (0%) ![]() ![]() |
Kod $("#rodzic").live('click', function() {
$(this).append('<div id="losoweid"></div>'); }); -------------------- PHP Developer
"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
Hmm pomysł ciekawy, ale niestety nie działa. prawie to rozwiązanie które podał @everth tylko przede wszystkim nie currentTarget a .target -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 782 Pomógł: 153 Dołączył: 21.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
@zegarek84
Dzięki Doszedłem jednak do wniosku że @kicaj ma rację, lepiej użyć tu live w połączeniu z dodatkową klasą
-------------------- Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]! |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 1.02.2010 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Dzieki za pomoc. Spróbowałem sprawdzić wszystkie opcje, ale za każdym razem wywoływany jest zarówno rodzic jak i potomek. Nie potrafię tego zniwelować. Użyłem standardowego JavaScript z onclick i wszystkie problemy się rozwiązały.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
@everth - mylisz się z 2 powodów, pierwszy mało znaczący to wydajność - live tutaj będzie wolniejszy od poprzedniego rozwiązania, drugi, to jeśli będziesz miał div w div'ie to do każdego dopasowanego elementu doda (wykona append) - a nie o to chodziło... live działa na zasadzie, że bind jest podpięty do body lub do html'a i potem elementy w górę drzewa DOM od .target są porównywane z elementami dopasowanymi do "selektorów"....
.lieve - Event Delegation czyli to działa na podobnej zasadzie co przykład z bind'em, pobraniem target'a i przeszukaniem w górę przez closest http://api.jquery.com/closest/#example-0 Dzieki za pomoc. Spróbowałem sprawdzić wszystkie opcje, ale za każdym razem wywoływany jest zarówno rodzic jak i potomek. Nie potrafię tego zniwelować. Użyłem standardowego JavaScript z onclick i wszystkie problemy się rozwiązały. nie wypróbowałeś wszystkich opcji ;] -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 782 Pomógł: 153 Dołączył: 21.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
To dziwne bo sprawdziłem u siebie na prostym przykładzie i działa. Tak, masz rację - live działa w sposób jaki opisujesz, tylko metoda closest zwraca najbliższy pasujący selektor w kontekście e.target - w tym wypadku kliknięty element appendable i stosuje do niego funkcję. To nie jest propagowane w górę.
-------------------- Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]! |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 12:42 |