Скольжение и скрытие нескольких панелей в jQuery - PullRequest
0 голосов
/ 30 октября 2009

У меня есть таблица с несколькими строками в каждой строке, это список выбора, и в зависимости от выбора (когда запускается событие onchange) появляются панели, содержащие дополнительные данные под строкой. В настоящее время у меня есть код, подобный этому:

 var allPnls = '.inv-dtl-comnts-add,.inv-dtl-comnts-update';
    $(document).ready(function(){
    hideAll();

    //select action change
    $(".inv-dtl-ddlaction").change(onSelectChange);

    $(".btn-cancel").click(function(event){
        slideAll();
        $(".inv-dtl-ddlaction").val('[Select an Action]');
        return false;
    });

});

    function onSelectChange(event){

    //find out which select item was clicked
    switch($(this).val())
    {
        case 'View/Add Comment':
            $(this).closest(".row").children(allPnls).slideUp("fast",
                function(){
                    $(this).closest(".row").children(".inv-dtl-comnts-add").slideToggle("fast");
            });
            break;
        case 'Change Status':
            $(this).closest(".row").children(allPnls).slideUp("fast",
                function(){
                    $(this).closest(".row").children(".inv-dtl-comnts-update").slideToggle("fast");
            });
            break;
        default:
            //code to be executed if n is different from case 1 and 2
    }

 }

 function hideAll(){
    $(allPnls).hide();
 }
 function slideAll(){
    $(allPnls).slideUp("fast");
 }

Таким образом, я скрываю все панели, когда страница загружается, и если панель уже открыта, я хочу закрыть ее перед открытием новой панели. Это работает с обратной передачей. С одной панелью в выборке она работала отлично, но с двумя панелями скольжение происходит дважды (кажется, что скользит вниз по неоткрытым панелям, прежде чем снова сдвинуть их вверх). Как я могу настроить это так, чтобы все панели, перечисленные в переменной allPnls, могли закрываться ТОЛЬКО, если они уже открыты? Есть ли лучший способ закрыть панели, а затем сделать обратный вызов для работы slideToggle?

Lloyd

1 Ответ

1 голос
/ 30 октября 2009

Вы можете закрыть только видимые или открытые панели, добавив: visible в селекторе, как показано ниже:

var allPnls = '.inv-dtl-comnts-add:visible,.inv-dtl-comnts-update:visible';

Я не уверен, что это решит вашу проблему. Может быть, если вы предоставите образец страницы, представляющей эту проблему, я мог бы помочь.

...