2009-08-28 19 views
14

sliderToggle yöntemini kullanırken, :visible ifadesi, doğrudan başka bir şey döndürme gibi görünmüyor.slideToggle ve: visible

show/hide'u :visible ifadesiyle birlikte kullanacak olursam, yalnızca iyi çalışır.

Örnek başarısızlık ait:

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... 
}); 

Örnek ait çalışma:

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... 
}); 

Bazı 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> 

Ben slideToggle değil varsayarak yaşıyorum yap show/hide - Kontrol edebileceğim başka bir şey var mı?

Firefox 3.5, IE 7, 8 ve Chrome 4'ün hepsini aynı sonuçlarla denedim.

sayesinde K

cevap

27

İlk (çalışma dışı) kod parçası slideToggle orta geçiş (daha doğrusu, bu geçiş başlamadan hemen sonra test eder.) Ne olursa olsun sizin olsun' iken, :visible sınayacaklar Açılış veya kapanış, orta geçiş durumu :visible olacaktır - böylece her zaman true olsun. bir işleyici ekleyerek slideToggle

+3

Tabii ki! Teşekkürler, şimdi bir muppet gibi hissediyorum - var isVisible =! Notes.is (": visible") çağırarak; slideToggle'dan önce cevabı gerekli buluyorum. Teşekkür ederim! – Kieron

+0

Bu biraz karşı sezgisel, ancak mükemmel bir anlam ifade eder. JQuery nesnesi için yalnızca dahili bir kayma durumumuz varsa ... –

2

deneyin çağırmadan önce .is(":visible") kontrol

deneyin.

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