2009-03-27 6 views
4

Я хочу slideUp некоторые divs, затем slideDown 1 div. Однако у меня возникают некоторые проблемы.Скрытие с показом div с помощью jQuery

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

С помощью этого кода, divDocument видна, divLocation нет. Потому что divLocation уже скрыт doStuff() Событие срабатывает немедленно, хотя divDocument еще не спрятан.

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

Этот код работает отлично, так как она ждет, пока divDocument не будет полностью скрыт перед вызовом DoStuff(). Я использую селектор нескольких элементов здесь? Я что-то неправильно делаю?

ответ

6

Если divLocation уже виден, почему бы не скрыть его первым?

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

EDIT:
К сожалению, я запутался. slideUp предназначен для скрытия элементов. По какой-то причине я думал, что это должно показать их. В этом случае, вы можете сделать это:

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

С :visible фильтром это сделать бы только slideUp на какой элемент (ы) открыты, так что они могут быть скрыты с slideUp. Я предполагаю, что это то, что вы ищете, поскольку нет смысла скрывать уже скрытый элемент. Если вы хотите на мгновение показать скрытую, а затем slideUp, вы можете просто переключить мой оригинальный ответ от hide() до show(), а затем сделать slideUp.

+0

Это скрывает divs перед показом divSearch, но я теряю эффект SlideUp, делая это. Я бы очень хотел сохранить эффект для согласованности. –

+0

Ваша ревизия почти отлично работает. Однако он делает именно то, что я хочу, если оба divs уже скрыты, он никогда не вызывает обратный вызов. Это указывало на меня в правильном направлении, но я забыл, что вы можете отфильтровать результат. Благодаря! –

+0

Я отправил свой окончательный код в качестве ответа, так что вы можете увидеть, как я обошел эту проблему. Благодаря! –

1

Вот код, в котором я закончил использование. Спасибо, Паоло, за то, что указал на меня в правильном направлении с фильтром.

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

+1 рад, что я мог бы помочь. –

Смежные вопросы