2009-03-27 14 views
4

Ich möchte slideUp einige divs, dann slideDown 1 div. Ich habe jedoch einige Probleme.Versteckt dann zeigt ein Div mit jQuery

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

Mit diesem Code divDocument sichtbar ist, ist divLocation nicht. Da die divLocation bereits ausgeblendet ist, wird das Ereignis doStuff() sofort ausgelöst, obwohl divDocument noch nicht ausgeblendet ist.

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

Dieser Code funktioniert gut, wie es wartet, bis divDocument voll doStuff() versteckt vor dem Aufruf. Verwende ich den Mehrfachselektor hier falsch? Mache ich etwas anderes falsch?

Antwort

6

Wenn divLocation bereits sichtbar ist, warum nicht zuerst ausblenden?

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

EDIT:
Sorry, habe ich verwirrt. SlideUp soll die Elemente ausblenden. Aus irgendeinem Grund dachte ich, es sollte ihnen zeigen. In diesem Fall könnten Sie dies tun:

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

Mit dem :visible Filter würde es tun nur die slideUp auf welchem ​​Elemente (e) sichtbar sind, so dass sie dann mit slideUp versteckt werden können. Ich schätze, das ist es, wonach Sie suchen, da es keinen Sinn hat, ein bereits verborgenes Element zu verstecken. Wenn Sie vorübergehend die versteckte und dann slideUp anzeigen möchten, können Sie einfach meine ursprüngliche Antwort von hide() zu show() wechseln und dann die slideUp tun.

+0

Dies versteckt die Divs vor dem Anzeigen von divSearch, aber ich verliere den SlideUp-Effekt, indem Sie dies tun. Ich möchte wirklich den Effekt für die Konsistenz behalten. –

+0

Ihre Revision funktioniert fast perfekt. Es tut genau das, was ich will, aber wenn beide Divs bereits versteckt sind, ruft es nie den Callback auf. Dies hat mich jedoch in die richtige Richtung gewiesen, ich habe vergessen, dass Sie ein Ergebnis wie filtern können. Vielen Dank! –

+0

Ich habe meinen endgültigen Code als Antwort veröffentlicht, damit Sie sehen können, wie ich dieses Problem gelöst habe. Vielen Dank! –

1

Hier ist der Code, den ich verwendet habe. Danke, Paolo, dass du mich mit dem Filter in die richtige Richtung gelenkt hast.

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

+1 froh, dass ich helfen konnte. –

Verwandte Themen