2010-03-18 91 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