2009-08-28 6 views
14

sliderToggleメソッドを使用すると、:visible式はtrue以外のものを返すようなことはありません。slideToggleと:visible

手動でshow/hide:visibleと組み合わせて使用​​すると、うまく動作します。作業

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

例:

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

一部の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> 

私はslideToggleがないと仮定しています行う a show/hide - 他に何か確認できますか?

Firefox 3.5、IE 7,8、およびChrome 4で試したことがありますが、すべて同じ結果です。

おかげで、 K

答えて

27

あなたの最初の(非稼働)コード片slideToggle半ば遷移が(より正確には、それは移行が開始した直後に、それをテストします。)にかかわらず、あなたかどうかの」の間、:visibleをテストします再開閉、中遷移状態は:visibleとなりますので、常にtrueとなります。

は、ハンドラを追加slideToggle

+3

もちろんです!ありがとうございました、今すぐmuppetのように感じる - var isVisible =!notes.is( ":visible"); slideToggleの前に私は答えが必要です。ありがとうございました! – Kieron

+0

これは少し直感的ですが、理にかなっています。 jQueryオブジェクトの内部スライドアップステータスのみがある場合は... –

2

てみてくださいを呼び出す前に.is(":visible")をチェックしてみます。

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