Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JQ] Zapamietanie otwartych zakladek
Forum PHP.pl > Forum > Po stronie przeglądarki
Kostek.88
Witam, mam taki kod

  1. <dl id="tabs">
  2. <dt>tab 1</dt>
  3. <dd>content 1</dd>
  4.  
  5. <dt>tab 2</dt>
  6. <dd>content 1</dd>
  7.  
  8. <dt>tab 3</dt>
  9. <dd>
  10. <dl id="tabs">
  11. <dt>subtab 1</dt>
  12. <dd>content</dd>
  13.  
  14. <dt class="active">subtab 2</dt>
  15. <dd>content</dd>
  16.  
  17. <dt>subtab 3</dt>
  18. <dd>content</dd>
  19. </dl>
  20.  
  21. <dt class="active">tab 4</dt>
  22. <dd>content 1</dd>
  23.  
  24. <dt>tab 5</dt>
  25. <dd>content 1</dd>
  26. <dl>


To jest uproszczony kod, bo w oryginale wystepuje wiecej zagniezdzen. Ale jest ogolnie taka konwencja. Zwrocce uwage na klase active. Jesli dodamy taka klase, to zakladka staje sie zaznaczona, a jej tresc pokazana. Usuwamy klase - wszystko pozamykane. Smiga dobrze.

Ale mam problem: gdy przelacze zakladke i odswieze strone, oczywiscia wszystko wraca do punktu wyjscia. Jedynym rozwiazaniem jest zapamietanie, ktora zakladka ma klase active. Najlepsze rozwiazanie to chyba index, np.

  1. $('element').live('click', function{
  2. var index = $(this).index(); // i to zapisac do cookie
  3. });


Ale... jak potem nadac klase "active" elementowi, ktory zostal zapamietany w cookie jako index? Z tego co widze, indexowanie idzie w glab: tzn.

- tab 1 ma index 0
- tab 2 ma index 1
- tab 3 ma index 2
- tab 4 ma natomiast index 6, bo wewnatrz 3. sa 3 zakladki (indexowane od 3 do 5)

Problem jest jeszcze taki, ze ktoras zakladka moze zostac zamknieta, wtedy obiekt jest NISZCZONY. Nie wchodzi w gre ukrywanie. Zakladki moga byc tez tworzone przez JQ. Wtedy struktura indexow zmienia sie. Jakie proponujecie rozwiazania?
Uriziel01
No ale chyba czegoś tutaj nie rozumiem, Tworząć drzewo tych zakładek zawsze robisz to w taki sam sposób, rozumiem nie ubywa ci w między czasie żadnych zakładek. W takim razie poprostu zapisz index tego elementu. I nie ma tutaj znaczenia czy ma ona index równy 3,4 czy 67429. Poprostu pokazujesz zakładkę o takim samym indexie jaki masz w ciastku.
Kostek.88
Cytat
Problem jest jeszcze taki, ze ktoras zakladka moze zostac zamknieta, wtedy obiekt jest NISZCZONY


Cytat
rozumiem nie ubywa ci w między czasie żadnych zakładek


Ja tez czegos tu nie rozumiem... napisalem, ze zakladki moga byc zamykane...
Uriziel01
No to jest tym prostsze, każdej ustawiasz unikalne ID i je przekazujesz. Skoro cokolwiek znika w 'międzyczasie' no to nie możesz polegać na indexach. Gdzie przechowujesz nazwy tych zakłądek ? W bazie danych czy statycznie w pliku ? W bazie jest całkiem łatwo bo wystarczy dodać nowe pole ID.
Kostek.88
W zasadzie przechowywac BEDE w bazie danych... dobra, to kazda ma ID, a jak technicznie w jQuery nadac odpowiedniej zakladce klase active? Poza tym tutaj bedzie potrzebnych kilka ciastek, bo bedzie troche zagniezdzen, ale OK, to sie zrobi. Ale juz mi sporo rozjasniles, dzieki.
Uriziel01
Na przykład tak:
  1. $('#unikalne_ID').attr('class', "active");


A najlepiej tak w pętli (kod pisany z palca, pewnie są błędy):
  1. var aktywne_karty= new Array("12","23","24","37")
  2.  
  3. for ( var i=0; i<aktywne_karty.length; i++ ){
  4. $('#karta_' + id).attr('class', "active");
  5. }


Tutaj tylko musisz pamietać o 3 sprawach:
1)Nie każdy musi mieć włączone ciastka w takim przypadku może lepiej trzymać te dane w sesji (nie powinno to obciążyć serwera) lub przynajmniej napisać to tak aby bez ciastek istniała także możliwość użytkowania serwisu.
2)Co do dużej ilości ciastek i zagnieżdzeń, choć nie przepadam za tą metodą to polece ci chyba jednak zrobienie serialize/json na tablicy z tymi numerami ID i zapisanie tego do jednego ciastka, wygląda to dużo lepiej niż dziesiątki pojedyńczych mniejszych ciastek.
Kostek.88
Dzieki wielkie, juz wiem jak dzialac. Nie wiedzialem po prostu, w ktora strone to ugryzc, a okazalo sie prostsze niz myslalem. Jesli chodzi o JSON, to jest to dobry pomysl jak dla mnie smile.gif

Co do uzytkowania serwisu... ma on dzialac na lokalu na specyficznych komputerach, wiec nie ma mowy o czyms takim, by ktos sobie wylaczyl ciastka, tym bardziej JS smile.gif Wiec problem mam z glowy. Na przyszlosc jak bede robil cos podobnego, wezme sesje pod uwage.
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.