Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][JavaScript]Pojedyńcze wybieranie slidetoggle
Forum PHP.pl > Forum > Przedszkole
rafik73
Mam taki skrypt:
[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function(){
  2.  
  3. // when "More" or "Less" (class moreOptionsLink) was clicked.
  4. $(".toggle" ).click(function(){
  5.  
  6. var txt = $(this).text();
  7.  
  8. if(txt=='⇓'){
  9. /*
  10.   * change the text to "Less"
  11.   * change the background color to "red"
  12.   * which means it shows all the options
  13.   */
  14. $(this).text('⇑');
  15. $(this).css("background-color","red");
  16. }
  17.  
  18. else{
  19. /*
  20.   * change the text to "More"
  21.   * change the background color to "green"
  22.   * which means it hides other options
  23.   */
  24. $(this).text('⇓');
  25. $(this).css("background-color","green");
  26. }
  27.  
  28. /*
  29.   * to animate the container of other options
  30.   * we use jQuery "next" to select the "moreOptions" of the current row
  31.   */
  32. $(".contact").slideToggle(200);
  33.  
  34. // so that it won't refresh the page
  35. return false;
  36. });
  37. });
[JAVASCRIPT] pobierz, plaintext


oraz php (widok opisowy):

  1. //tutaj początek pętli A (while)
  2.  
  3. //tutaj zapytanie mysql
  4.  
  5. //tutaj początek pętli B (while do zapytania mysql powyżej)
  6.  
  7. echo '<div><a href="" class="toggle">Contact</a></div>'; //przycisk-link rozsuwania diva o klasie contact
  8.  
  9. echo '<div class="contact">$zawartosc</div>'; //tutaj wyświetla się zawartość tabeli mysql
  10.  
  11. //tutaj koniec pętli B
  12.  
  13. //tutaj koniec pętli A


Problem w tym, że po naciśnięciu przycisku-linku rozsuwania diva rozsuwają się wszystkie wyświetlone w pętli divy z zawartością tabeli mysql.
Zmiana koloru przycisku inicjowana w skrypcie js działa zaś idywidualnie dla każdego wyświetlonego rekordu.
kapslokk
$(this) odnosi się do elementu który jest aktualnie kliknięty, a $(".contact") do wszystkich elementów które mają klasę 'contact'.
Wygoogluj sobie jquery siblings i powinno pomóc.
rafik73
Próbuję tak:

[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function(){
  2.  
  3. // when "More" or "Less" (class moreOptionsLink) was clicked.
  4. $(".toggle" ).click(function(){
  5.  
  6. var txt = $(this).text();
  7.  
  8. if(txt=='&dArr;'){
  9. /*
  10.   * change the text to "Less"
  11.   * change the background color to "red"
  12.   * which means it shows all the options
  13.   */
  14. $(this).text('&uArr;');
  15. $(this).css("background-color","red");
  16. }
  17.  
  18. else{
  19. /*
  20.   * change the text to "More"
  21.   * change the background color to "green"
  22.   * which means it hides other options
  23.   */
  24. $(this).text('&dArr;');
  25. $(this).css("background-color","green");
  26. }
  27.  
  28. /*
  29.   * to animate the container of other options
  30.   * we use jQuery "next" to select the "moreOptions" of the current row
  31.   */
  32. $(this).siblings(".contact").slideToggle(200);
  33.  
  34. // so that it won't refresh the page
  35. return false;
  36. });
  37. });
[JAVASCRIPT] pobierz, plaintext


i nic...
kapslokk
Usuń tego diva w którym masz a, albo dodaj jeszcze parent()
rafik73
Usunięcie div'a nic nie dało

Ciekawe jest to, że zmianę kolorów wykonuje prawidłowo i indywidualnie

Co robię nie tak?
kapslokk
Pokaz aktualny kod.
rafik73
[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function(){
  2.  
  3. // when "More" or "Less" (class moreOptionsLink) was clicked.
  4. $(".toggle" ).click(function(){
  5.  
  6. var txt = $(this).text();
  7.  
  8. if(txt=='&dArr;'){
  9. /*
  10.   * change the text to "Less"
  11.   * change the background color to "red"
  12.   * which means it shows all the options
  13.   */
  14. $(this).text('&uArr;');
  15. $(this).css("background-color","red");
  16. }
  17.  
  18. else{
  19. /*
  20.   * change the text to "More"
  21.   * change the background color to "green"
  22.   * which means it hides other options
  23.   */
  24. $(this).text('&dArr;');
  25. $(this).css("background-color","green");
  26. }
  27.  
  28. /*
  29.   * to animate the container of other options
  30.   * we use jQuery "next" to select the "moreOptions" of the current row
  31.   */
  32. $(this).siblings(".contact").slideToggle(200);
  33.  
  34. // so that it won't refresh the page
  35. return false;
  36. });
  37. });
[JAVASCRIPT] pobierz, plaintext


  1. echo '<div id="main">';
  2.  
  3. //tutaj początek pętli A (while)
  4.  
  5. //tutaj zapytanie mysql
  6.  
  7. //tutaj początek pętli B (while do zapytania mysql powyżej)
  8.  
  9. echo '<a href="" class="toggle">Contact</a>'; //przycisk-link rozsuwania diva o klasie contact
  10.  
  11. echo '<div class="contact">$zawartosc</div>'; //tutaj wyświetla się zawartość tabeli mysql
  12.  
  13. //tutaj koniec pętli B
  14.  
  15. //tutaj koniec pętli A
  16. echo'</div>';


Cała zawartość jest w głównym kontenerze "main"

questionmark.gifquestionmark.gif
kapslokk

https://jsfiddle.net/w4qpmfqh/1/
rafik73
Powalczyłem i działa exclamation.gif!!!!
Serdeczne dzięki exclamation.gif!!!!

Mam pytanie o rozszerzenie możliwości powyższego skryptu. Mianowicie mam skrypt jquery, który zwija/rozwija
pojedyńczo, czyli jak w tym temacie, ale chciałem dołączyć przycisk, który zwija/rozwija wszystkie elementy naraz.
Sam skrypt to nie problem. Schody zaczynają się, gdy np rozwinę dwa elementy z pięciu, apotem jednym przyciskiem chcę
zwinąć/rozwinąć wszystko naraz. Efekt jest taki, że te co rozwinąłem pojedyńczo się zwijają a pozostałe nierozwinięte rozwijają.

Skrypt rozwijania pojedyńczego:

[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function(){
  2. $(".staly:even").css("background-color", "#6B3C53");
  3. $(".staly:odd").css("background-color", "#B1AE98");
  4. $(".toggle").click(function () {
  5. $(".contact:even").css("background-color", "#6B3C53");
  6.  
  7. var swapped = $(this).attr("data-swapped");
  8. var init = 'false';
  9.  
  10. if(swapped === 'false'){
  11. var swapImage = $(this).attr("data-swap");
  12. init = true;
  13. }else{
  14. var swapImage = $(this).attr("data-src");
  15. }
  16.  
  17. $(this).attr({
  18. 'src': swapImage,
  19.  
  20. 'data-swapped': init
  21. });
  22.  
  23. $(this).parent().parent().parent().next(".contact").slideToggle(400);
  24.  
  25. return false;
  26. });
  27. });
[JAVASCRIPT] pobierz, plaintext



a poniżej rozwijania grupowego:

[JAVASCRIPT] pobierz, plaintext
  1. $(function()
  2. {
  3. $(".staly:even").css("background-color", "#6B3C53");
  4. $(".staly:odd").css("background-color", "#B1AE98");
  5. $(".toggle_all").click(function()
  6. {
  7. $(".contact:even").css("background-color", "#6B3C53");
  8. var swapped = $(this).attr("data-swapped_all");
  9. var init = 'false';
  10.  
  11. if(swapped === 'false'){
  12. var swapImage = $(this).attr("data-swap_all");
  13. init = true;
  14. }else{
  15. var swapImage = $(this).attr("data-src_all");
  16. }
  17.  
  18. $(this).attr({
  19. 'src': swapImage,
  20.  
  21. 'data-swapped_all': init
  22. });
  23. $(".contact").slideToggle(400);
  24.  
  25.  
  26. return false;
  27. });
  28. });
[JAVASCRIPT] pobierz, plaintext


Żadnych pomysłów?
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.