4

我想滑动一些 div,然后滑动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()。我在这里使用了错误的多元素选择器吗?我做错了什么吗?

4

2 回答 2

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.

于 2009-03-27T17:55:37.557 回答
1

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

var o = $("#divDocument,#divLocation").filter(':visible');
if (o.length > 0) {
    o.slideUp("normal",
    function() {
        $("#divSearch").slideDown("normal", doStuff);
    });
}
else {
    doStuff();
}
于 2009-03-27T18:13:07.360 回答