2009-08-28 9 views
14

Podczas korzystania z metody sliderToggle, wyrażenie :visible wydaje się nigdy nie zwracać niczego poza prawdą.slideToggle and: visible

Jeśli ręcznie użyję show/hide w połączeniu z wyrażeniem :visible, to będzie działało dobrze.

Przykład awaria:

jQuery(".fileNode .nodeExpander").click(function() { 
    var notes = jQuery(this).parent().siblings(".fileNotes"); 
    notes.slideToggle ("fast"); 

    var isVisible = notes.is(":visible"); // Always returns true... 

    // Do stuff based on visibility... 
}); 

Przykład pracy:

jQuery(".fileNode .nodeExpander").click(function() { 
    var notes = jQuery(this).parent().siblings(".fileNotes"); 
    var isVisible = notes.is(":visible"); 

    if (isVisible) 
     notes.hide("fast"); 
    else 
     notes.show("fast"); 

    // Do stuff based on visibility... 
}); 

Some HTML:

<ul> 
    <li class="fileNode"> 
     <img src="<%= Url.Content ("~/Images/Collapse.png") %>" alt="<%= UIResources.CollpaseAltText %>" class="nodeExpander" /> 
    </li> 
    <li class="fileLink"> 
     <%= Html.ActionLink (file.Name, "Details", new { id = file.FileId }) %> 
    </li> 
    <li class="fileNotes"> 
     <%= file.Description %> 
    </li> 
</ul> 

jestem przy założeniu, że nie slideToggle robić a show/ - czy jest coś jeszcze, co mogę sprawdzić?

Próbowałem już w Firefox 3.5, IE 7, 8 i Chrome 4 ... wszystkie z tymi samymi wynikami.

Dzięki, K

Odpowiedz

27

Twój pierwszy (bez pracy) fragment kodu będzie testowanie :visible podczas slideToggle jest w połowie przejścia (dokładniej, to testuje go tuż po uruchomieniu przejścia). Niezależnie od tego, czy” ponowne otwarcie lub zamknięcie, stan przejściowy będzie :visible - więc zawsze otrzymasz true.

Spróbuj sprawdzić .is(":visible") przed wywołaniem slideToggle

+3

Oczywiście! Dzięki, poczuj się teraz jak muppet - przez wywołanie var isVisible =! Notes.is (": visible"); przed slideToggle otrzymuję wymaganą odpowiedź. Dziękuję Ci! – Kieron

+0

Jest to trochę sprzeczne z intuicją, ale ma sens. Jeśli mamy tylko wewnętrzny status slide-up dla obiektu jQuery ... –

2

Spróbuj dodać obsługi.

notes.slideToggle ("fast", function() { 
    var isVisible = notes.is(":visible"); 
});