2012-12-26 236 views
0

我有手風琴和切換效果的jquery菜單。但它適用於錯誤:有時會關閉所有元素。手風琴+切換菜單

你能幫忙做到最好嗎?

HTML:

<ul id="accordion"> 
    <li> 
     <a href="#">Level 1</a> 
     <ul> 
      <li><a href="#">11</a></li> 
      <li><a href="#">12</a></li> 
     </ul> 
    </li> 
    <li> 
     <a href="#">Level 2</a> 
     <ul style="display: none;"> 
      <li><a href="#">21</a></li> 
      <li><a href="#">22</a></li> 
     </ul> 
    </li> 
</ul> 

JS:

var sel = '#accordion' 
$(sel + ' li a').toggle(
     function() { 
      var checkElement = $(this).next(); 
      if((checkElement.is('ul')) && (checkElement.is(':visible'))) { 
       return false; 
      } 
      if((checkElement.is('ul')) && (!checkElement.is(':visible'))) { 
       $(sel + ' ul:visible').slideUp('normal').removeClass('selected'); 
       checkElement.addClass('selected').slideDown('normal', function() { 

       }); 
       return false; 
      } 
     }, 
     function() { 
      $(sel + ' ul:visible').removeClass('selected').slideUp('normal', function() { 

      }); 
     } 
    );​ 

DEMO:http://jsfiddle.net/uG6zB/11/

回答

1

我看着你的代碼,我不知道肘是你正在嘗試以最好的功能據我所知,這樣做。

我改變toggleclick,我改變了你的邏輯只是一點點。

的JavaScript現在看起來是這樣的:

var sel = '#accordion' 
$(sel + ' li a').click(function(){ 
    var checkElement = $(this).next(); 
    if((checkElement.is('ul')) && (checkElement.is(':visible'))) { 
     checkElement.slideUp('normal').removeClass('selected'); 
    } 
    else if((checkElement.is('ul')) && (!checkElement.is(':visible'))) { 
     $(sel + ' ul:visible').slideUp('normal').removeClass('selected'); 
     checkElement.addClass('selected').slideDown('normal', function() { 

     }); 
    } 
}); 

有了這個JavaScript我能得到的菜單上上下下,沒有古怪的行爲。 fiddle