2009-10-30 59 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工作?

勞埃德

回答

1

您可以通過將關閉唯一可見的或打開面板:在下面選擇可見:

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

我不知道這是否會盡管解決您的問題。也許如果你提供代表這個問題的樣本頁面,我可以提供幫助。