style jumbo getbootstrap dropup disabled bootstrap twitter-bootstrap accordion twitter-bootstrap-3

jumbo - ¿Cómo se logra que Twitter Bootstrap Accordion mantenga abierto un grupo?



list bootstrap style (6)

Intento imitar la barra de Outlook utilizando Twitter bootstrap usando el plugin de acordeón y colapso, hasta ahora obtuve el colapso y el acordeón funcionando, pero actualmente permite que todas las secciones se colapsen.

Me gustaría limitarlo para que siempre se muestre uno y solo uno.

Aquí es en el que estoy trabajando: http://jsfiddle.net/trajano/SMT9D/ y creo que está en algún lugar a lo largo de las líneas de

$(''#accordions'').on(''hide'', function (event) { console.warn("HIDE TRIGGERED, check if trying to hide the active one if so stop"); })


Bootstrap 4.0

$(''.card'').click(function(e) { if ( $(this) .find(''.collapse'') .hasClass(''show'') ) { e.stopPropagation(); } });

Este bloque de código comprueba si la tarjeta cliqueada está contraída (mirando el div con el collapse clase). Cuando la tarjeta se show actualmente, deja de propagar el evento .


Aquí hay una manera fácil de hacerlo:

Nueva Bootstrap 3

JsFiddle para Bootstrap 3.

Código para Bootstrap 3:

$(''.panel-heading a'').on(''click'',function(e){ if($(this).parents(''.panel'').children(''.panel-collapse'').hasClass(''in'')){ e.stopPropagation(); } // You can also add preventDefault to remove the anchor behavior that makes // the page jump // e.preventDefault(); });

El código verifica si el elemento cliqueado es el que se muestra actualmente (por la clase "in") y si tiene la clase "in", detiene el proceso de ocultación.

Bootstrap obsoleto 2

JsFiddle para Bootstrap 2.

Código para Bootstrap 2:

$(''.accordion-toggle'').on(''click'',function(e){ if($(this).parents(''.accordion-group'').children(''.accordion-body'').hasClass(''in'')){ e.stopPropagation(); } // You can also add preventDefault to remove the anchor behavior that makes // the page jump // e.preventDefault(); });

Nota: tenga cuidado si desea adjuntar más eventos de clic en el acordeón, ya que e.stopPropagation() bloqueará los eventos que se producirían después de la comprobación.


O puede usar un simple truco de CSS de la siguiente manera:

/* prevent the active panel from collapsing */ .panel-group [aria-expanded=true]{ /* http://caniuse.com/#feat=pointer-events Works for MOST modern browsers. (- Opera Mobile) */ pointer-events: none; }

debe tener etiquetas adecuadas en los enlaces del panel inactivo

aria-expanded="false"


Quiero precisar la respuesta de @Hugo Dozois

http://jsfiddle.net/SMT9D/61/

Debería agregar e.preventDefault(); para evitar el comportamiento predeterminado de # HTML anclar si tiene un desplazamiento en su página

$(''.panel-heading a'').on(''click'',function(e){ if($(this).parents(''.panel'').children(''.panel-collapse'').hasClass(''in'')){ e.preventDefault(); e.stopPropagation(); } });


Según la versión de bootstarp 3.3.6, solo sigue la estructura

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous"> <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true"> <div class="panel panel-default"> <div class="panel-heading" role="tab" id="headingOne"> <h4 class="panel-title"> <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne"> Collapsible Group Item #1 </a> </h4> </div> <div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne"> <div class="panel-body"> collopse 1 body here </div> </div> </div> <div class="panel panel-default"> <div class="panel-heading" role="tab" id="headingTwo"> <h4 class="panel-title"> <a class="collapsed" role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo"> Collapsible Group Item #2 </a> </h4> </div> <div id="collapseTwo" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo"> <div class="panel-body"> collapse body 2 </div> </div> </div> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>


Actualizado 2018

A continuación, le mostramos cómo mantener al menos abierto en Bootstrap v3 o v4. Esto significa que el acordeón abierto solo se puede cerrar al alternar otro abierto .

Bootstrap 4

https://www.codeply.com/go/bbCcnl0jBB

// the current open accordion will not be able to close itself $(''[data-toggle="collapse"]'').on(''click'',function(e){ if ( $(this).parents(''.accordion'').find(''.collapse.show'') ){ var idx = $(this).index(''[data-toggle="collapse"]''); if (idx == $(''.collapse.show'').index(''.collapse'')) { e.stopPropagation(); } } });

Además, vea esta respuesta que muestra cómo especificar un acordeón "predeterminado" que se abrirá cuando todos los demás estén cerrados.

Bootstrap 3

$(''[data-toggle="collapse"]'').on(''click'',function(e){ if($(this).parents(''.panel'').find(''.collapse'').hasClass(''in'')){ var idx = $(this).index(''[data-toggle="collapse"]''); var idxShown = $(''.collapse.in'').index(''.accordion-body''); if (idx==idxShown) { e.stopPropagation(); } } });

https://www.codeply.com/go/yLw944BrgA

<div class="accordion" id="myAccordion"> <div class="panel"> <button type="button" class="btn btn-danger" data-toggle="collapse" data-target="#collapsible-1" data-parent="#myAccordion">Question 1?</button> <div id="collapsible-1" class="collapse"> .. </div> </div> <div class="panel"> <button type="button" class="btn btn-danger" data-toggle="collapse" data-target="#collapsible-2" data-parent="#myAccordion">Question 2?</button> <div id="collapsible-2" class="collapse"> .. </div> </div> <div class="panel"> <button type="button" class="btn btn-danger" data-toggle="collapse" data-target="#collapsible-3" data-parent="#myAccordion">Question 3?</button> <div id="collapsible-3" class="collapse"> ... </div> </div> </div>

( Nota: la clase de panel es necesaria en Bootstrap 3 para que funcione el acordeón )