Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][jQuery] Jak sprawdzić, czy .toggle() ukryło czy pokazało własnie element?
Forum PHP.pl > Forum > Przedszkole
kukix
Witam.

Jak sprawdzić, czy metoda .toggle() ukryła własnie element czy go pokazała?

Kod
        $(this).children('ul').toggle(speed);//ukrywamy albo pokazujemyt dzieciaki

        if ($(this).children('ul').is(":visible")) {
          alert('ROBIMY ADD');
          $(this).children('a').addClass('active');
        } else {
          alert('ROBIMY REMOWE');
          $(this).children('a').removeClass('active');
        }


Powyższy warunek "is visible" zwraca mi zawsze true.

W czym jest problem? Czy problemem jest to, że nie odnosze się do tego elementu co trzeba?
melkorm
http://jsbin.com/ulezak/4/edit

Może ten przykład Ci coś rozjaśni smile.gif
zegarek84
przecież w toggle możesz wywołać callback, a tam jakąś zmienną zmieniać lub przypisać coś do .data i już wiesz w którym trybie jest dany element...
http://api.jquery.com/toggle/
kukix
Cytat(zegarek84 @ 23.11.2011, 12:25:35 ) *
przecież w toggle możesz wywołać callback, a tam jakąś zmienną zmieniać lub przypisać coś do .data i już wiesz w którym trybie jest dany element...
http://api.jquery.com/toggle/


Tak, moge wywołac funkcje, ale w tym callback nie mam infomracji, czy akurat ukryto, czy pokazano element.. i tu jest problem..

erix
No to przecież możesz wykonać:
[JAVASCRIPT] pobierz, plaintext
  1. $(this).is(':visible');
[JAVASCRIPT] pobierz, plaintext


Na siłę wynajdujesz problem. tongue.gif
kukix
Cytat(erix @ 24.11.2011, 13:57:55 ) *
No to przecież możesz wykonać:
[JAVASCRIPT] pobierz, plaintext
  1. $(this).is(':visible');
[JAVASCRIPT] pobierz, plaintext


Na siłę wynajdujesz problem. tongue.gif


Już załątwiłem sprawe:

Kod
      var $that = $(this).children('a');

      $(this).children('ul').toggle(200, function() {

        if ($(this).is(":visible")) {
          $that.addClass('active');
        } else {
          $that.removeClass('active');
        }
    
      });


jak wykonuje funkcje callback i wtedy sprawdzam czy jest vidoczny element $(this) wtedy rozpoznaje poprawnie i wszystko jest ok.

Mam tylko jeszcze jedno pytanie..
Jak zmodyfikowac element: $that.removeClass('active');
Aby kasował ten styl również dla głębiej zagnieżdżonych elementów li ?
Niktoś
Nie wiem czy to zadziła:
$that.parents('li').removeClass('active');

lub pokombinuj z :
find();
zegarek84
jak już wspomniał Erix na siłę wynajdujesz problemy... skoro ustawiasz speed to callback'a nawet do swojego sprawdzenia musisz dać a nie tak od razu i nie wiem, czy pseudo klasa w jQuery :visible obejmuje też .css("display")=='block', dlaczego to piszęquestionmark.gif - manual jQuery, po skończeniu ukrywania w toggle element ma nadany dispaly: none, i też od razu miałby nadany display block przy pokazywaniu - w sumie ma od razu jednak jeszcze masz opacity więc pasuje to zrobić w callbacku po pełnym pokazaniu elementu skoro ustawiłeś tam czas...

ale to wspomniałem o metodach jQuery... przecież wiesz z jakiego stanu startują Twoje elementy na Twojej stronie - optymalniej by było skorzystać z jakiejś zmiennej pomocniczej bądź a jQuerowego .data dla danego elementu...
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.