简体   繁体   English

我无法让jQuery手风琴在点击时崩溃?

[英]I can't get my jQuery accordion to collapse on click?

I have this accordion set up so that when I click it, the panel opens. 我已经设置好了手风琴,所以当我单击它时,面板会打开。 But I can't figure out how to make the panels close when it's clicked again? 但是我不知道如何在再次单击面板时使其关闭? I'm not very jQuery savvy, so I tried a few things which didn't work. 我不是很精通jQuery,所以我尝试了一些不起作用的方法。 Please help? 请帮忙?

The CSS CSS

.accordion {
    margin: 50px;
}
.accordion dt, .accordion dd {
    padding: 10px;
    border-bottom: 0;
}
.accordion dt a, .accordion dd a {
    display: block;
    color: black;
    font-weight: bold;
}
.accordion dd {
    border-top: 0;
    font-size: 12px;
}
.accordion dd:last-of-type {
    border-top: 1px solid white;
    position: relative;
    top: -1px;
}

The HTML HTML

<dl class="accordion">
  <dt><a href="">Panel 1</a></dt>
  <dd>Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc. Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.</dd>
  <dt><a href="">Panel 2</a></dt>
  <dd>Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc. Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.</dd>
  <dt><a href="">Panel 3</a></dt>
  <dd>Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc. Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.Pellentesque fermentum dolor. Aliquam quam lectus, facilisis auctor, ultrices ut, elementum vulputate, nunc.</dd>
</dl>

JQuery jQuery查询

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
<script>
(function($) {

  var allPanels = $('.accordion > dd').hide();

  $('.accordion > dt > a').click(function() {
    allPanels.slideUp();
    $(this).parent().next().slideDown();
    return false;
  });

})(jQuery);
</script>

One option is to keep track of the dt visibility. 一种选择是跟踪dt可见性。 Check out the jQuery data object . 签出jQuery数据对象 It can help you store arbitrary data. 它可以帮助您存储任意数据。 http://jsfiddle.net/q22Lvukw/ http://jsfiddle.net/q22Lvukw/

(function($) {

  var allPanels = $('.accordion > dd').hide();

  $('.accordion > dt > a').click(function() {
    var dt = $(this).parent().next();
      if(dt.data('visible') == true){
       dt.slideUp();   
       dt.data('visible',false);
      }
      else{
          dt.slideDown();
          dt.data('visible',true);
      }
    return false;
  });

})(jQuery);

This is what you are looking for. 这就是您要寻找的。 You need to check to see if it is hidden first then that will decide whether or not it will slide down or slide up. 您需要检查它是否先被隐藏,然后才能确定它是向下滑动还是向上滑动。

(function($) {
    var allPanels = $('.accordion > dd').hide();
    var tg = false;
    $('.accordion > dt > a').click(function() {
        if($(this).parent().next().is(":hidden"))
            tg = true;
        allPanels.slideUp();
        if(tg)
            $(this).parent().next().slideDown();
        tg = false;
        return false;
    });
});

JSFiddle JSFiddle

Try this: It basically checks for the panel height, if it is 0 (collapsed) it will open it up, if not it will do nothing. 尝试以下操作:它基本上检查面板的高度,如果它是0(折叠),它将打开它,如果不是,它将什么都不做。 Here's a fiddle: http://jsfiddle.net/pu1yhngj/ 这是一个小提琴: http : //jsfiddle.net/pu1yhngj/

(function($) {

 var allPanels = $('.accordion > dd').hide();

  $('.accordion > dt > a').click(function() {
      allPanels.slideUp();
      var panel = $(this).parent().next();
      if(panel[0].clientHeight == 0)  
          panel.slideDown();

      return false;
  });

})(jQuery);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM