我想 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()。我在这里使用多元素选择器错了吗?我做错了什么吗?
答案 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();
}