5

I have a functioning Bootstrap 3.0 accordion that opens when you click one of the Main Links. The only issue is that if you click on a second Main Link, the first link does not collapse - they all just stay open.

Is there a way to make the other sections close, leaving only one open at a time?

HTML:

<div class="container"> <!-- begin left nav --> <div class="col-sm-2"> <div class="left-nav"> <div class="accordion" id="accordion2"> <!-- group start --> <div class="accordion-group"> <div class="accordion-heading"> <a class="accordion-toggle leftnav-primary" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne"> Main Link 1 </a> </div> <div id="collapseOne" class="accordion-body collapse"> <!-- add "in" to class to load acc section open --> <div class="accordion-inner"> <div class="left-nav-section"><a href="product.html" class="leftnav-secondary">Product 1</a></div> <!-- add "selected-section" to add background color --> <div class="left-nav-section"><a href="product.html" class="leftnav-secondary">Product 2</a></div> <div class="left-nav-section"><a href="product.html" class="leftnav-secondary">Product 3</a></div> <div class="left-nav-section"><a href="product.html" class="leftnav-secondary">Product 4</a></div> </div> </div> </div> <!-- end group --> <!-- group start --> <div class="accordion-group"> <div class="accordion-heading"> <a class="accordion-toggle leftnav-primary" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo"> Main Link 2 </a> </div> <div id="collapseTwo" class="accordion-body collapse"> <div class="accordion-inner"> <div class="left-nav-section"><a href="product.html" class="leftnav-secondary">Link</a></div> <div class="left-nav-section"><a href="product.html" class="leftnav-secondary">Link</a></div> </div> </div> </div> <!-- end group --> <!-- group start --> <div class="accordion-group"> <div class="accordion-heading"> <a class="accordion-toggle leftnav-primary" data-toggle="collapse" data-parent="#accordion2" href="#collapseThree"> Main Link 3 </a> </div> <div id="collapseThree" class="accordion-body collapse"> <div class="accordion-inner"> <div class="left-nav-section"><a href="product.html" class="leftnav-secondary">Link</a></div> <div class="left-nav-section"><a href="product.html" class="leftnav-secondary">Link</a></div> </div> </div> </div> <!-- end group --> <!-- group start --> <div class="accordion-group"> <div class="accordion-heading"> <a class="accordion-toggle leftnav-primary" data-toggle="collapse" data-parent="#accordion2" href="#collapseFour"> Main Link 4 </a> </div> <div id="collapseFour" class="accordion-body collapse"> <div class="accordion-inner"> <div class="left-nav-section"><a href="product.html" class="leftnav-secondary">Link</a></div> <div class="left-nav-section"><a href="product.html" class="leftnav-secondary">Link</a></div> </div> </div> </div> <!-- end group --> <!-- group start --> <div class="accordion-group"> <div class="accordion-heading"> <a class="accordion-toggle leftnav-primary" data-toggle="collapse" data-parent="#accordion2" href="#collapseFive"> Main Link 5 </a> </div> <div id="collapseFive" class="accordion-body collapse"> <div class="accordion-inner"> <div class="left-nav-section"><a href="product.html" class="leftnav-secondary">Link</a></div> <div class="left-nav-section"><a href="product.html" class="leftnav-secondary">Link</a></div> </div> </div> </div> <!-- end group --> </div> </div> </div> <!-- /left nav --> </div> 

CSS:

body { margin: 10px; background-color: #eee; } .left-nav { width:200px; padding: 15px; font-size: 110%; text-transform: uppercase; background-color:#ff0; -moz-border-radius: 2px; -webkit-border-radius: 2px; -khtml-border-radius: 2px; border-radius: 2px; background: rgb(255, 255, 255) transparent; background: rgba(255, 255, 255, 0.6); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99ffffff, endColorstr=#99ffffff); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99ffffff, endColorstr=#99ffffff)"; overflow:hidden; } a.leftnav-primary:link { color:#363; text-decoration: none; } a.leftnav-primary:visited { color:#363; text-decoration: none; } a.leftnav-primary:hover { color:#6e2585; text-decoration: none; } a.leftnav-primary:active { color:#363; text-decoration: underline; } a.leftnav-secondary:link { color:#6c6f70; text-decoration: none; font-size: 90%; } a.leftnav-secondary:visited { color:#6c6f70; text-decoration: none; font-size: 90%; } a.leftnav-secondary:hover { color:#6e2585; text-decoration: none; font-size: 90%; } a.leftnav-secondary:active { color:#6e2585; text-decoration: underline; font-size: 90%; } .left-nav-section { padding-left: 20px; } .left-nav-section:hover { background-color: #eee; } 

Here is my JS Fiddle with the working accordion: http://jsfiddle.net/lorkel/pK7cA/

3 Answers 3

9

This is a known Bootstrap issue: https://github.com/twbs/bootstrap/issues/10966

If you change your accordion-group to panel it will work (but may not have the desired style)

http://jsfiddle.net/pK7cA/1/

Hopefully it will be fixed in the near future so that it's not dependent on panel for use of data-parent.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks Skelly. So there's no JS workaround to get the others to close at the moment?
2

There is a way to close others. If anyone came here in search just like me.

The way to do it is to maintain "data-parent" same as accordion's id.

if the parent is

<div class="panel-group" id="accordion123"> 

Then children must have :

<div class="panel panel-default"> <div class="panel-heading" ... data-parent="#accordion123"> </div> </div> 

Comments

0
<div id="accordion" role="tablist" aria-multiselectable="true"> All panels inside this.. </div> 

In our case, the problem was in HTML structure, as we had <div id="accordion> inside foreach loop. The fix is to use a single accordion for all the panels.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.