I have a bootstrap nav-tabs nav-stacked list which needs to use accordion to collapse all lists except for the one most recently clicked, or with active children.
I have this working somewhat, but can't seem to figure out how to get the chevron to change direction unless clicked.
I formerly had this only set up to do collapse, and not accordion-collapse... so need some javascript advice to get it fully functional.
jsfiddle: http://jsfiddle.net/utcwebdev/NBcmh/17/ (uses normal bootstrap markup, plus a custom bootswatch css theme)
Here's the markup:
<ul id="sidenav01" class="accordion nav nav-department nav-tabs nav-stacked">
<li>
<a href="department-mathematics.php"><i class="icon-home"></i> Mathematics</a>
</li>
<li>
<a href="#li02" data-toggle='collapse' data-target='#subnav01', data-parent='#sidenav01' class="accordion-toggle collapsed"><i class="icon-chevron-up pull-right"></i>Programs </a>
<ul id="subnav01" class="nav nav-list collapse">
<li><a href="#1"><i class="icon-home"></i> Programs Home</a></li>
<li><a href="#2">Undergraduate Program</a></li>
<li><a href="#3">Graduate Program</a></li>
<li><a href="#4">Undergraduate Program</a></li>
<li><a href="#5">Math Plaza</a></li>
<li><a href="#6">UTeaChattanoga</a></li>
<li><a href="#7">Placement Criteria</a></li>
<li><a href="#8">Step Ahead Math</a></li>
</ul>
</li>
<li>
<a href="#page">A Single Math Page</a>
</li>
<li>
<a href="#li03" data-toggle='collapse' data-target='#subnav02', data-parent='#sidenav01' class="accordion-toggle collapsed"><i class="icon-chevron-up pull-right"></i>Student Resources</a>
<ul id="subnav02" class="nav nav-list collapse">
<li><a href="#pimu">Pi Mu Epsilon</a></li>
<li><a href="#schol">Scholarships and Awards</a></li>
<li><a href="#links">Math Links</a></li>
<li><a href="#advise">Advisement</a></li>
</ul>
</li>
<li>
<a href="directory.php"><i class="icon-group"></i> Staff Profiles</a>
</li>
</ul>
And here's the javascript:
$(document).on('click', '.accordion-toggle', function(event) {
event.stopPropagation();
var $this = $(this);
var parent = $this.data('parent');
var actives = parent && $(parent).find('.collapse.in');
// From bootstrap itself
if (actives && actives.length) {
hasData = actives.data('collapse');
//if (hasData && hasData.transitioning) return;
actives.collapse('hide');
}
var target = $this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, ''); //strip for ie7
$(target).collapse('toggle');
});
I was stuck on a similar problem, however I have managed to find the solution for the accordion arrows to switch but I can't figure how to keep the active one always open while being able to collapse the others.
If you're using Font Awesome 3.2.1, then in the css, use the following to call the changes:
.collapsed .icon-chevron:before {content: "\f078";} .icon-chevron:before {content: "\f077";}
Thank you sody. Here is a fix which did not require changing HTML markup. Add the following js prior to var target:
Credit due to a developer on this project.
http://jsfiddle.net/utcwebdev/NBcmh/24/
It seems that bootstrap collapse plugin not fully implemented for accordions. It toggles collapsed css class only for clicked element.
UPD To fix this you just need to find all toggle buttons and do the same with them:
And don't forget to add
accordion-group
classes.http://jsfiddle.net/NBcmh/29/
Is it possible to add another level to the accordion?
I added this portion of html but it's not showing it.
http://jsfiddle.net/labanino/G3PqR/12/