2009-10-30 3 views
0

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

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

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

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

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

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