javascript - Setting up disclosure triangles for Bootstrap 3 accordion -
i pretty frustrate bootstrap 3 accordion control doesn't seem have built-n class toggle open/close on heading of accordion.
i need have accordion 1 css class on header when child open, , closed. i'm close following code, doesn't cover situation when user closes , opened pane without choosing different pane -- works right if keep choosing different panes.
the 3 things need headers correctly show state:
- when pane set opened default (add "in" class html of pane)
- when manually opened or closed, show right class
- when closed clicking different pane open
i far have
$(function() { $('h4.panel-title').each(function() { // check headers see if have open children var isopen = $(this).closest('.panel').find('.panel-collapse').hasclass('in'); // and, if yes, set class "open" if (isopen) { $(this).addclass('open'); } }); $('h4.panel-title').on('click', function(event) { // remove "open" class headers in group $(this).closest('.accordion-group').find('h4.panel-title').removeclass('open'); // set 1 clicked on open $(this).addclass('open'); });
with html:
<div class="panel-group accordion-group" id="accordion"> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"> <a data-toggle="collapse" data-parent="#accordion" data-target="#collapseone"> collapsible group item #1 </a> </h4> </div> <div id="collapseone" class="panel-collapse collapse in"> <div class="panel-body"> text... </div> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"> <a data-toggle="collapse" data-parent="#accordion" data-target="#collapsetwo"> collapsible group item #2 </a> </h4> </div> <div id="collapsetwo" class="panel-collapse collapse"> <div class="panel-body"> text... </div> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h4 class="panel-title"> <a data-toggle="collapse" data-parent="#accordion" data-target="#collapsethree"> collapsible group item #3 </a> </h4> </div> <div id="collapsethree" class="panel-collapse collapse"> <div class="panel-body"> text... </div> </div> </div> </div>
it didn't survive being pasted fiddle, here is: http://jsfiddle.net/smlombardi/kw33s/
try this,
$(function() { $('h4.panel-title').on('click', function(event) { // remove "open" class headers in group $(this).closest('.accordion-group').find('h4.panel-title').removeclass('open'); // remove "in" class collapse panel $(this).closest('.accordion-group').find('.collapse').removeclass("in"); // set 1 clicked on open $(this).addclass('open'); $(this).parent().next(".collapse").addclass("in"); }); });
Comments
Post a Comment