Search code examples
jqueryjquery-uijquery-ui-accordion

Allow all JQuery accordion sections to be open


I have a fully working JQuery accordion except for the fact that I want to have the ability to have all the sections open. To achieve this an user must be able to open a section without the other one's collapsing.

This is a bit counterintuitive, but a real-life accordion can also be expanded to it's full extend.

$(document).ready(function() {
  $("#accordion").accordion({
    heightStyle: 'content',
    collapsible: true,
    toggle: false
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">

<div id="accordion">
  <h3>Section 1</h3>
  <div>
    A
  </div>
  <h3>Section 2</h3>
  <div>
    B
  </div>
  <h3>Section 3</h3>
  <div>
    C
  </div>
  <h3>Section 4</h3>
  <div>
    D
  </div>
</div>

JS Fiddle: https://jsfiddle.net/xu9d53ta/

How would I achieve this?


Solution

  • Try this:

    var headers = $('#accordion .accordion-header');
    var contentAreas = $('#accordion .ui-accordion-content ').hide();
    var expandLink = $('.accordion-expand-all');
    
    // add the accordion functionality
    headers.click(function() {
        var panel = $(this).next();
        var isOpen = panel.is(':visible');
     
        // open or close as necessary
        panel[isOpen? 'slideUp': 'slideDown']()
            // trigger the correct custom event
            .trigger(isOpen? 'hide': 'show');
    
        // stop the link from causing a pagescroll
        return false;
    });
    
    // hook up the expand/collapse all
    expandLink.click(function(){
        $(".ui-accordion-content").show();
    });
    body {
        font-family: "Trebuchet MS", "Helvetica", "Arial",  "Verdana", "sans-serif";
        font-size: 62.5%;
    }
    
    .accordion-expand-holder {
        text-align: center;
        padding: 10px;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
    <p class="accordion-expand-holder">
        <a class="accordion-expand-all" href="#">Expand all</a>
    </p>
    <div id="accordion" class="ui-accordion ui-widget ui-helper-reset">
    
        <h3 class="accordion-header ui-accordion-header ui-helper-reset ui-state-default ui-accordion-icons ui-corner-all">
            <span class="ui-accordion-header-icon ui-icon ui-icon-triangle-1-e"></span>
            Section 1
        </h3>
        <div class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom">
            <p>
                Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer
                ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit
                amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut
                odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.
            </p>
        </div>
            <h3 class="accordion-header ui-accordion-header ui-helper-reset ui-state-default ui-accordion-icons ui-corner-all">
            <span class="ui-accordion-header-icon ui-icon ui-icon-triangle-1-e"></span>
            Section 2
        </h3>
         <div class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom">
            <p>
                Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer
                ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit
                amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut
                odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.
            </p>
        </div>
            <h3 class="accordion-header ui-accordion-header ui-helper-reset ui-state-default ui-accordion-icons ui-corner-all">
            <span class="ui-accordion-header-icon ui-icon ui-icon-triangle-1-e"></span>
            Section 3
        </h3>
         <div class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom">
            <p>
                Mauris mauris ante, blandit et, ultrices a, suscipit eget, quam. Integer
                ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit
                amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut
                odio. Curabitur malesuada. Vestibulum a velit eu ante scelerisque vulputate.
            </p>
        </div>
    </div>

    Fiddle link: https://jsfiddle.net/s5hAw/1091/

    Credits: https://stackoverflow.com/a/43445385/13695248