Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [jquery] Dynamiczne dzieci
Fifi209
post
Post #1





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Mam pojemnik (div content), do którego mam przyczepione zdarzenie click, które z kolei wykonuje kod:
[JAVASCRIPT] pobierz, plaintext
  1. $("#content").append('<div class="text"><div class="menu"><div class="edit" alt="Edit"></div><div class="move" alt="Move"></div><div class="del" alt="Delete"></div></div></div>');
[JAVASCRIPT] pobierz, plaintext


Podpinam zdarzenie:
[JAVASCRIPT] pobierz, plaintext
  1. $(".text").live('click',
  2. function() {
  3. alert(1);
  4. }
  5. );
[JAVASCRIPT] pobierz, plaintext


Zamiast alerta próbowałem np:
[JAVASCRIPT] pobierz, plaintext
  1. $(this).children("div").show();
  2. $(this).children().show();
[JAVASCRIPT] pobierz, plaintext


Bez skutku... Jak więc dobrać się do "menu" ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
zegarek84
post
Post #2





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


już jakiś czas nie pisałem w js i w zasadzie prawie nigdy nie korzystałem z jQuery ale taka mała uwaga gdy patrzę na strukturę html'a i Twój kod to niby to powinno działać z małym zastrzeżeniem - masz podpięte zdarzenie pod ten sam kontener do którego dodajesz elementy i zapewne na tym zdarzeniu masz ustawione coś w stylu stopPropagation lub return false - dlaczego tak wnioskuję(IMG:style_emoticons/default/questionmark.gif) - w sumie nie przeglądałem kodu źródłowego funkcji live ale chyba ona podpina zdarzenie pod body lub sam html i sprawdza elementy od target'a...

rozwiązanie napisałem prawie w czystym js - prawie gdyż nie chciało mi się rozpisywać z targetem - już kilka razy stosowałem podobne rozwiązania coby podpinać tylko jedną funkcję na tysiące elementów i stosowałem routing w zalezności od niektórych warunków - kod pisany z palca i teraz nie testowany - jeśli coś nie działa to albo daj całą stronę albo luknij co tam konsola wypluwa i delikatnie sam sobie poprawisz (generalnie niby klika podpinam pod główny kontener ale w niczym to nie przeszkadza ;]):
[JAVASCRIPT] pobierz, plaintext
  1. var nContent = document.getElementById('content');
  2. var oClassCallback = {};
  3. oClassCallback['text'] = function(e){alert(1);};
  4. oClassCallback['menu'] = function(e){alert(this.innerHTML);};
  5. oClassCallback['edit'] = oClassCallback['move'] = oClassCallback['del'] = function(e){alert(this.getAttribute('class'));};
  6.  
  7. var fContent = function(e){
  8. var nTarget = e.target, sClass;
  9. if(nTarget.nodeType!==1) nTarget = nTarget.parentNode;
  10. // wywołanie callbacków tylko dla dzieci
  11. while(nTarget!==nContent){
  12. sClass = nTarget.getAttribute('class');
  13. sClass && (oClassCallback[sClass] instanceof Function) && oClassCallback[sClass].call(nTarget, e); // a jeszcze eventa z jQuery przerzuciłem dalej jakbyś potrzebował ;D
  14. nTarget = nTarget.parentNode;
  15. }
  16. nTarget = e = sClass = null;
  17. };
  18. $(nContent).click(fContent);
[JAVASCRIPT] pobierz, plaintext


ps.
sprawdziłem na szybko na tym forum - podpiąłem pod body i callbacka z this.innerHTML dałem na signature (podpisy) - działa poprawnie ;]
edit - jeszcze jakbyś potrzebował na routingu eventa z jQuery to przerzuciłem go dalej w call...

a stopPropagation przy tej metodzie sam sobie prosto możesz zaimplementować przy jeszcze jednym warunku w while ;]

Ten post edytował zegarek84 31.05.2011, 23:58:32
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.06.2026 - 15:38