简体   繁体   中英

Accordion toggle icon

So I managed to work out how to change the + icon to - when toggled however you toggle another accordion and the other close it the icon stays - and I wanted to return to + icon.

Was trying to recreate my accordion in jsfiddle but somehow it doesn't work well. http://jsfiddle.net/13cgkvwg/

or just look at the html mockup HERE

$(".accordion").on("click", "dd", function () {
    $("dd.active").find(".content").slideUp("slow");
        if(!$(this).hasClass("active")) {
          $(this).find(".content").slideToggle("slow");
          $(this).find('i').addClass('fa fa-minus-circle');
        } else{
            $(this).find('i').removeClass('fa-minus-circle').addClass('fa fa-plus-circle');
        }
    // }
});

<section class="faq_accordion">
    <div class="row">
        <div class="large-12 columns">
            <dl class="accordion" data-accordion="myAccordionGroup">
              <dd class="accordion-navigation">
                <a href="#panel2">Hosting <i class="fa fa-plus-circle"></i></a>
                <div id="panel2" class="content">
                  <p>Panel 2. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
                </div>
              </dd>
              <dd class="accordion-navigation">
                <a href="#panel3">Accordion 3 <i class="fa fa-plus-circle"></i></a>
                <div id="panel3" class="content">
                  <p>Panel 2. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
                </div>
              </dd>
            </dl>
        </div>
    </div>
</section>

Element doesn't have active class so never goes to else. So you have to add active class like:

$(".accordion").on("click", "dd", function () {
    $(this).find(".content").slideUp("slow");//use this here instead of dd.active
        if(!$(this).hasClass("active")) {
          $(this).find(".content").slideToggle("slow");
          $(this).find('i').addClass('fa fa-minus-circle');
          $(this).addClass("active");//here add active class
        } else{
            $(this).find('i').removeClass('fa fa-minus-circle').addClass('fa fa-plus-circle');
            $(this).removeClass("active");//and here remove active class
        }
});

fiddle

Check this Fiddle .

$(".accordion").on("click", "dd", function () {
  $("dd.active").find(".content").slideUp("slow");
  if(!$(this).hasClass("active")) {
    $(this).find(".content").slideToggle("slow");
    $("dd").find('i').removeClass('fa fa-minus-circle').addClass('fa fa-plus-circle');
    $(this).find('i').addClass('fa fa-minus-circle');
    $("dd").removeClass("active");
    $(this).addClass("active");
  } else{
    $(this).find('i').removeClass('fa fa-minus-circle').addClass('fa fa-plus-circle');
    $(this).removeClass("active");
  }
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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