2009-03-27 13 views
4

私はslideUpにしたいいくつかのdivs、次にslideDown 1 div。しかし、私はいくつかの問題があります。このコードでjQueryを使用してdivを表示していない

$("#divDocument,#divLocation").slideUp("normal", function() 
    { $("#divSearch").slideDown("normal", doStuff()); }); 

divDocumentdivLocationではない、表示されています。 divLocationは既に隠されているので、divDocumentがまだ非表示ではないにもかかわらず、doStuff()イベントがすぐに発生します。 divDocumentが完全にdoStuff()を呼び出す前に隠されてまで、それは待つよう

$("#divDocument).slideUp("normal", function() 
    { $("#divSearch").slideDown("normal", doStuff()); }); 

このコードは、正常に動作します。ここで間違った複数の要素セレクタを使用していますか?間違って何かしていますか?

答えて

6

divLocationが既に表示されている場合は、最初に非表示にしてください。

$("#divDocument,#divLocation").hide().slideUp("normal", function() { 
    $("#divSearch").slideDown("normal", doStuff()); 
}); 

EDIT
申し訳ありませんが、私は混乱しました。 slideUpは要素を隠すためのものです。何らかの理由で私はそれがそれらを示すことを意図していると思った。それが唯一のいずれかの要素(複数可)にslideUpを行うだろう:visibleフィルタ付き

$("#divDocument,#divLocation").filter(':visible').slideUp("normal", function() { 
    $("#divSearch").slideDown("normal", doStuff()); 
}); 

が表示されているので、彼らはその後、slideUpで非表示にすることができます。その場合は、あなたがこれを行うことができます。私はこれがあなたが探しているものだと推測しています。隠された要素を隠すことに意味がないからです。瞬間的に隠したものを表示してからslideUpを表示したい場合は、元の回答をhide()からshow()に変更し、slideUpを実行してください。

+0

divSearchを表示する前にdivを非表示にしていますが、これでスライドアップ効果が失われます。私は本当に一貫性のために効果を維持したいと思います。 –

+0

あなたのリビジョンはほぼ完璧に動作します。ただし、両方のdivが既に非表示になっている場合、コールバックを呼び出すことはありません。これは正しい方向に私を指摘している、私はあなたのような結果をフィルタすることができます忘れてしまった。ありがとう! –

+0

私は最終的なコードを答えとして掲示していますので、この問題をどのように回避できたか分かります。ありがとう! –

1

ここで私が使用したコードです。ありがとう、パオロ、私はフィルタと正しい方向に向いています。

var o = $("#divDocument,#divLocation").filter(':visible'); 
if (o.length > 0) { 
    o.slideUp("normal", 
    function() { 
     $("#divSearch").slideDown("normal", doStuff); 
    }); 
} 
else { 
    doStuff(); 
} 
+0

+1してうれしいです。 –

関連する問題