Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][jQuery] Jak sprawdzić, czy .toggle() ukryło czy pokazało własnie element?
kukix
post 23.11.2011, 02:12:02
Post #1





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


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?
Go to the top of the page
+Quote Post
melkorm
post 23.11.2011, 02:37:24
Post #2





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


http://jsbin.com/ulezak/4/edit

Może ten przykład Ci coś rozjaśni smile.gif


--------------------
Go to the top of the page
+Quote Post
zegarek84
post 23.11.2011, 10:25:35
Post #3





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

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


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/


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
kukix
post 24.11.2011, 11:52:34
Post #4





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


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..

Go to the top of the page
+Quote Post
erix
post 24.11.2011, 11:57:55
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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


Na siłę wynajdujesz problem. tongue.gif


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
kukix
post 24.11.2011, 13:14:08
Post #6





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


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 ?

Ten post edytował kukix 24.11.2011, 13:58:38
Go to the top of the page
+Quote Post
Niktoś
post 24.11.2011, 14:29:55
Post #7





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Nie wiem czy to zadziła:
$that.parents('li').removeClass('active');

lub pokombinuj z :
find();
Go to the top of the page
+Quote Post
zegarek84
post 24.11.2011, 14:46:24
Post #8





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

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


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...

Ten post edytował zegarek84 24.11.2011, 14:46:42


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 13.07.2025 - 14:15