隐藏然后使用jQuery显示div

时间:2009-03-27 17:53:08

标签: jquery css-selectors callback

我想 slideUp 一些div,然后 slideDown 1 div。但是,我遇到了一些问题。

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

使用此代码, divDocument 可见, divLocation 不可见。由于 divLocation 已隐藏, doStuff()事件会立即触发,即使 divDocument 尚未隐藏。

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

此代码工作正常,因为它等待 divDocument 完全隐藏,然后再调用 doStuff()。我在这里使用多元素选择器错了吗?我做错了什么吗?

2 个答案:

答案 0 :(得分:6)

如果divLocation已经可见,为什么不先隐藏它?

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

修改
对不起,我很困惑。 slideUp用于隐藏元素。出于某种原因,我认为这是为了向他们展示。在这种情况下,你可以这样做:

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

使用:visible过滤器,只会对可见的任何元素执行slideUp,然后可以使用slideUp隐藏这些元素。我猜这是你正在寻找的,因为隐藏已经隐藏的元素是没有意义的。如果您想暂时显示隐藏的一个,然后slideUp,则可以将原始答案从hide()切换为show(),然后执行slideUp

答案 1 :(得分:1)

这是我最终使用的代码。谢谢,Paolo,用过滤器指示我正确的方向。

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