Jquery手风琴不显示点击内容

时间:2015-11-02 10:46:06

标签: javascript jquery accordion jquery-ui-accordion

我有以下代码,试图在我的网站上实现手风琴,但它不起作用 - 任何人都可以建议为什么(我的网页头部引用了js和css)?

HTML:

   <dl class="accordion">
     <dt>Answer 1</dt>
     <dd>Details of the answer go here...</dd>
     </dl>
     <dl class="accordion">
     <dt>Answer 2</dt>
     <dd>Details of the answer go here...</dd>
     </dl>

CSS:

    .accordion { margin: 0 0 30px; border-top: 1px solid #DDD; border-right: 1px solid #DDD; border-left: 1px solid #DDD;
-webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; }

    .accordion dt { border-bottom: 1px solid #DDD; }

    .accordion dd { display: none; padding: 20px; border-bottom: 1px solid #DDD; }

    .accordion dt { cursor: pointer; padding: 8px 15px; margin: 0; }

    .accordion dt:before { content: "\25B6"; padding-right: 5px; }

    .accordion dt.accordion-active:before { content: "\25BE"; padding-right: 5px; }

    .accordion dt.accordion-active:hover { cursor: default; }

JS:

 (function($) {
    //Hide all panels
    var allPanels = $('.accordion > dd').hide();
    //Show first panel
    $('.accordion > dd:first-of-type').show();
    //Add active class to first panel 
    $('.accordion > dt:first-of-type').addClass('accordion-active');
    //Handle click function
    jQuery('.accordion > dt').on('click', function() {
      //this clicked panel
      $this = $(this);
    //the target panel content
      $target = $this.next(); 

       //Only toggle non-displayed 
       if(!$this.hasClass('accordion-active')){
          //slide up any open panels and remove active class
          $this.parent().children('dd').slideUp();

          //remove any active class
         jQuery('.accordion > dt').removeClass('accordion-active');
          //add active class
          $this.addClass('accordion-active');
          //slide down target panel
         $target.addClass('active').slideDown();

      } 

    return false;
 });

 })(jQuery)

2 个答案:

答案 0 :(得分:0)

jQuery(function() {
  //Hide all panels
  var allPanels = $('.accordion > dd').hide();

  jQuery('.accordion > dt').on('click', function() {
    $this = $(this);
    //the target panel content
    $target = $this.next();

    if ($target.hasClass("in")) {
      $target.slideUp();
      $target.removeClass("in");
    } else {
      jQuery('.accordion > dd').removeClass("in");
      $target.addClass("in");

      jQuery('.accordion > dd').slideUp();
      $target.slideDown();
    }
  })
})

添加plunker链接以管理所选箭头。

答案 1 :(得分:0)

试试这个plunker

<!DOCTYPE html>
<html>

<head>
    <script data-require="jquery@1.11.3" data-semver="1.11.3" src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>

    <style>
        .accordion {
            margin: 0 0 30px;
            border-top: 1px solid #DDD;
            border-right: 1px solid #DDD;
            border-left: 1px solid #DDD;
            -webkit-border-radius: 4px;
            -moz-border-radius: 4px;
            border-radius: 4px;
        }

        .accordion dt {
            border-bottom: 1px solid #DDD;
        }

        .accordion dd {
            display: none;
            padding: 20px;
            border-bottom: 1px solid #DDD;
        }

        .accordion dt {
            cursor: pointer;
            padding: 8px 15px;
            margin: 0;
        }

        .accordion dt:before {
            content: "\25B6";
            padding-right: 5px;
        }

        .accordion dt.accordion-active:before {
            content: "\25BE";
            padding-right: 5px;
        }

        .accordion dt.accordion-active:hover {
            cursor: default;
        }
    </style>
</head>

<body>
    <dl class="accordion">
        <dt>Answer 1</dt>
        <dd>Details of the answer go here...</dd>
    </dl>
    <dl class="accordion">
        <dt>Answer 2</dt>
        <dd>Details of the answer go here...</dd>
    </dl>

    <script>
        (function($) {
            //Hide all panels
            var allPanels = $('.accordion > dd').hide();
            //Show first panel
            // commenting this
            // $('.accordion > dd:first-of-type').show();
            //Add active class to first panel 
            // $('.accordion > dt:first-of-type').addClass('accordion-active');
            //Handle click function
            jQuery('.accordion > dt').on('click', function() {
                //this clicked panel
                $this = $(this);
                //the target panel content
                $target = $this.next();

                //Only toggle non-displayed 
                if (!$this.hasClass('accordion-active')) {
                    // hide all dd's
                    $('.accordion > dd').hide();
                    //slide up any open panels and remove active class
                    $this.parent().children('dd').slideUp();

                    //remove any active class
                    jQuery('.accordion > dt').removeClass('accordion-active');
                    //add active class
                    $this.addClass('accordion-active');
                    //slide down target panel
                    $target.addClass('active').slideDown();

                }

                return false;
            });

        })(jQuery)
    </script>
</body>

</html>