1

我有以下代码用于常见问题列表之类的。当用户单击按钮时,信息会向下滑动以显示内容。然后他们可以单击相同的按钮来关闭内容。

由于我在此页面上有多个列表,我想要的是,如果一个列表已打开并且用户单击另一个列表将其打开,则打开的列表将关闭,而另一个列表将打开。这样用户就没有一英里长的滚动条。

这是我的代码:

JS

$('.service').live('click',function(){
  $(this).parent().children().toggle();  //swaps the display:none between the two spans
  $(this).parent().parent().find('.content').slideToggle();  //swap the display of the main content with slide action
 });

$('.service').click(function(e) {
  e.preventDefault(); //Prevents link from taking them to top of page
});

HTML

<div class="service-container">
 <div class='service-title'>
  <a href="#" class="service fancy_button"><span style="background-color: #0f071e;"><i class="icon-plus"></i> Open</span></a>
  <a href="#" class="service fancy_button" style="display:none;"><span style="background-color: #666;"><i class="icon-minus"></i> Close</span></a>
  </div>
   <div class='content' style='display:none;'>
      <p>My Content</p>
   </div>
</div>

如果有更好的方法,我不介意重写代码。

想法:

截屏

4

1 回答 1

2

主要是我建议你不要使用live()方法,因为它已被弃用。相反,您可以通过on()以下方式使用方法:

$(".service-title").on("click", ".service", function(e) {
    $(this).siblings().andSelf().toggle()
        .parent().siblings(".content").slideToggle();

    e.preventDefault();
});

演示:http: //jsfiddle.net/bnT6Q/

为了使当前打开的其他打开的容器关闭,我们可以稍微改写一下代码:

$(".service-title").on("click", ".service", function(e) {
    $(".service-container")
        .has($(".content:visible").add(this))
        .find(".service").toggle().end()
        .find(".content").slideToggle();

    e.preventDefault();
});​

演示:http: //jsfiddle.net/bnT6Q/1/

于 2012-10-21T23:32:22.460 回答