Скрытие и показ div с использованием jQuery - PullRequest
4 голосов
/ 27 марта 2009

Я хочу slideUp несколько делений, затем slideDown 1 деление. Однако у меня есть некоторые проблемы.

$("#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 ]

6 голосов
/ 27 марта 2009

Если 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.

1 голос
/ 27 марта 2009

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

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