2010-03-18 89 views
0

的jQuery:簡單的摺疊式菜單(jQuery的)

// ACCORDION 
$('.accordion .answer').hide(); // hide all 
$('.accordion .question').click(function(){ 
    $('.accordion .answer').slideUp(); // hide all open 
    $(this).addClass('active').next().slideDown(); // show the anwser 
    return false; 
}); 

HTML:

<dl class="accordion"> 
    <dt class="question">question</dt> 
    <dd class="answer">answer</dd> 
    <dt class="question">question</dt> 
    <dd class="answer">answer</dd> 
</dl> 

...工作,但

  • '活動' 類必須從不活動的問題元素中刪除&
  • 至少有一個答案保持開放;所有的答案應該能夠關閉。

謝謝!

+1

輪再造? http://docs.jquery.com/UI/Accordion – Quentin 2010-03-18 09:08:28

+0

不想爲小部件和動畫加載50多kb的js,只需要一個基本的手風琴。 – 3zzy 2010-03-18 09:16:59

+0

對於Accordion及其依賴關係(忽略jQuery本身,因爲您正在使用它)而言,它不會超過15kb。 – Quentin 2010-03-18 09:22:43

回答

1

好了,想通:

$('.accordion .answer').hide(); // hide all 
$(".accordion .question").click(function() { 
    $(this).toggleClass('active').next(".answer").slideToggle(300).siblings(".answer").slideUp("slow"); 
    $(this).siblings().removeClass('active'); 
}); 
1
$('.accordion .answer').hide(); // hide all 
$('.accordion .question').click(function(){ 
    if($(this).hasClass('active')) { 
     $(this).removeClass('active').next().slideUp(); 
    } else { 
     $('.accordion .answer').removeClass('active').slideUp(); 
     $(this).addClass('active').next().slideDown(); 
    } 
    return false; 
}); 

但是你真的應該看看jQuery UI Accordion

+0

近乎作品!但是1)它允許打開多個答案,2)如果你先打開然後打開第二個,那麼它們都保留「活動」類。 – 3zzy 2010-03-18 09:21:20

+0

你是絕對正確的,一個小錯誤(忘了一個點(。))和我思考中的一個缺陷(忘記了滑動不合要求)。現在應該工作,但我看到你自己想清楚了。 :) – tdolsen 2010-03-18 12:51:07