Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JQuery] find
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
zend
W momencie kliknięcia na link sprawdzam czy istnieje podklasa "location", jeżeli istnieje usuwam klasę, jeżeli nie istnieje, wykonuje zapytanie żeby pobrać dane. Problem tkwi w tym ze find zwraca mi kolekcję klas, co powoduje nawet kilkunastokrotne (raz było 30 sic!) wykonywanie zapytań, jak ograniczyć rezultaty do jednego? Próbowałem $(parent).find('.location').first().html() ale nie działa wogóle

W wypadku gdy rozwinę drzewo element => podlista => podpodlista => podpodlista do takiej postaci i kliknę na "element" to przeszukuje mi całe drzewo i wysyła taką ilość zapytań ile jest odgałęzień
[JAVASCRIPT] pobierz, plaintext
  1. //kod w zdarzeniu click na odnośnik
  2. var parent = $(this).parent();
  3. if($(parent).find('.location').html() == null) {/*zapytanie ajax*/} else
  4. {
  5. $(parent).find('.location').remove();
  6. }
[JAVASCRIPT] pobierz, plaintext


Struktura dokumentu
  1. <div class="location">
  2. <ul>
  3. <li>
  4. <a href="">xxx</a>
  5. <div class="location">
  6. <ul>
  7. <li>
  8. <a href="">xxx</a>
  9. </li>
  10. </ul>
  11. </div>
  12. </li>
  13. </ul>
  14. </div>
erix
Cytat
Próbowałem $(parent).find('.location').first().html() ale nie działa wogóle

jeśli dobrze zrozumiałem:
[JAVASCRIPT] pobierz, plaintext
  1. if($(parent).find('.location').first().length>0){}
[JAVASCRIPT] pobierz, plaintext
zend
Zarówno po moim kodzie jak i po Twoim, chodzi mi o first(), zdażenie click nie wykonuje się, wszystko działa tak jak by nie było js, a to był zwykły link
erix
Mhmm, ale co tak naprawdę chcesz osiągnąć...?

Cytat
to przeszukuje mi całe drzewo i wysyła taką ilość zapytań ile jest odgałęzień

Potrzebujesz raczej cancelBubble...
zend
Cytat
Mhmm, ale co tak naprawdę chcesz osiągnąć...?

Żeby po pierwszym napotkanym elemencie spełniającym warunki zaprzestało dalszych poszukiwań

Cytat
Potrzebujesz raczej cancelBubble...
Mógłbyś dać przykład jak to wkomponować w $(parent).find('.location').html()? Bo nie wiem gdzie to upchnąć
erix
Cytat
Żeby po pierwszym napotkanym elemencie spełniającym warunki zaprzestało dalszych poszukiwań

No to sprawdzasz przez length, jak napisałem.

Cytat
Mógłbyś dać przykład jak to wkomponować w $(parent).find('.location').html()? Bo nie wiem gdzie to upchnąć

Przecież podałem Ci gotowy warunek...
zend
Ok, to inaczej, z tym first() nie będę już kombinował, bo całkiem przestaje mi działać js, natomiast nie mam pojęcia jak użyć cB w konekście kolekcji
[JAVASCRIPT] pobierz, plaintext
  1. event.cancelBubble = true; //tak przerywamy, tylko jak mając tak kod $(parent).find('.location').html() mogę się dobrać do obiektu i przerwać bańkę?
[JAVASCRIPT] pobierz, plaintext
erix
w jQuery inaczej się tego używa winksmiley.jpg

Ale jeśli chodzi o logikę -> wklepujesz to do handlera danego zdarzenia.
zend
Dzięki za pomoc ale problem okazał się tkwić w zupełnie innej rzeczy..

[JAVASCRIPT] pobierz, plaintext
  1. function locationClick()
  2. {
  3. $('.subLocations').click(function(){
  4.  
  5. //alert($(this).parent().find('.location').html());
  6. var myThis = this;
  7.  
  8. if($(this).parent().find('.location').html() == null)
  9. {
  10. $.ajax({
  11. url : $(this).attr('href').replace('%7E' , '~'),
  12. data : {'format' : 'html'},
  13. success : function(data)
  14. {
  15. if(data.length > 3)
  16. $(myThis).parent().html($(myThis).parent().html().replace('%7E' , '~') + data);
  17.  
  18. $('.subLocations').unbind('click'); //kod który usunął problem
  19. locationClick();
  20. //locationCheckbox();
  21. }
  22. });
  23. } else {
  24. $(myThis).parent().find('.location').remove();
  25. }
  26.  
  27. return false;
  28. });
  29. }
[JAVASCRIPT] pobierz, plaintext


Za każdym razem gdy wysyłałem rządanie na nowo nakładałem zdarzenie click na klasy subLocations, co w konsekwencji powodowało że na ten sam wpis z czasem były nakładane kolejne zdarzenia click które sysyłały nadmiarowe zapytania do serwera. Problem można rozwiązać poprzez zdjęcie zdarznia click z klas i późniejsze potórne nałożenie
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.