Search code examples
javascriptjqueryhtmlaccordionjquery-ui-accordion

Make Accordion Close on second click JQUERY


I have made JQUERY Accordions which work fine.

HTML:

<div id="accordion">

<div class="title"><span>Accordian 1</span></div>
<div class="hide">

  <p>hidden content</p>

</div>

<div class="title"><span>Accordian 2</span></div>
<div class="hide">

  <p>hidden content</p>

</div>


<div class="title"><span>Accordian 3</span></div>
<div class="hide">

   <p>hidden content</p>

</div>

<div class="title"><span>Close all the accordions</span></div>

</div>

JQUERY

$(document).ready(function() {

    $('#accordion .hide').hide();
   $('#accordion .title span').click(function(){
           $('#accordion .hide').slideUp();
           $(this).parent().next().slideDown();

           return false;
   });

});

What I would like is when a user clicks an accordion to open it, and then clicks it a second time that it would close.

So 1st click = open, 2 click = close.

How would I go about this?

Thanks


Solution

  • HTML :

    <div id="accordion">
    <div class="title"><span>Accordian 1</span></div>
    <div class="hide">
      <p>hidden content</p>
    </div>
    <div class="title"><span>Accordian 2</span></div>
    <div class="hide">
      <p>hidden content</p>
    </div>
    <div class="title"><span>Accordian 3</span></div>
    <div class="hide">
       <p>hidden content</p>
    </div>
    <div class="close"><span>Close all the accordions</span></div>
    </div>
    

    Use slideToggle() , to toggle between slideUp and slideDown

    $(document).ready(function() {    
       $('#accordion .hide').hide();
       $('#accordion .title span').click(function(){
               $(this).parent().next()
                      .slideToggle()
                      .siblings('.hide').slideUp();
               return false;
       });
        $('.close').click(function(){
            $('#accordion .hide').slideUp();
        });
    });
    

    Fiddle Demo