2009-10-30 61 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'; 

我不知道这是否会尽管解决您的问题。也许如果你提供代表这个问题的样本页面,我可以提供帮助。