2011-01-13 12 views
8

De forma predeterminada, hay encabezados de contenido para controlar la expansión/colapso. Pero en mi situación, podría expandir/contraer los contenidos de otros elementos, también. Por ejemplo:¿Puedo expandir/contraer el contenido de JQuery ui Accordion al hacer clic también en otros elementos?

la estructura básica del código de jQuery UI accodion:

<script> 
    $(function() { 
     $("#accordion").accordion(); 
    }); 
    </script> 



<div class="demo"> 

<div id="accordion"> 
    <h3><a href="#">Section 1</a></h3> 
    <div> 
     <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> 

y ahora. Tengo otros elementos, al igual que:

<ul id="another elements can expand/collapse too"> 
    <li><a href=""> expand/collapse contents of section1 of id=accordion too</a></li> 
........ 
</ul> 

muchas gracias !!

Respuesta

5

Puede usar .activate con falso pasado para colapsar todos los elementos programáticamente. Como solo tiene un elemento abierto a la vez, esto funcionará para colapsar cualquier elemento que esté abierto mostrando ese enlace. Esto solo funcionará si tiene collapsible establecido en true.

Puede pasar qué otro elemento desea expandir para expandir ese elemento al hacer clic.

+1

+1, pero la opción se llama ahora 'activa' solamente – gotqn

9

Reducir pestaña acordeón:

$('.accordion').accordion('activate', false); 

Expand primera pestaña de acordeón:

$('.accordion').each(function (idx, item) { 
    if ($(item).accordion("option", "active") === false) { 
     $(item).accordion('activate', 0); 
    } 
}); 
+0

Gracias. Me salvaste de juguetear, y agradezco mucho tu solución. – Ace

+0

Este consejo funcionó para mí. +1. Solo tuve que cambiarlo a esto: ['$ ('. Acordeón'). Acordeón ('opción', 'activo', falso);' para jQuery UI '1.11'] (http://api.jqueryui.com/accordion/# option-active). ¡Gracias! – mhulse

5

I tenía problemas para conseguir los acordeones a colapsar/expandir después de que fueron inicialmente cargadas. Para evitar esto he utilizado:

$('#accordionId h3').click(); 

... que imita clic en el área de encabezado y obligará a cambiar las clases de activación.

Me sentí como un truco, pero funcionó, mejor.

+0

Según [el "comentario" de este usuario] (http://stackoverflow.com/a/24591516/456814): el método "*' activate' ha quedado en desuso desde jquery ui 1.9 y eliminado de 1.10+. Más información sobre él y nueva sintaxis se puede encontrar en [jQuery UI 1.9 Guía de actualización] (http://jqueryui.com/upgrade-guide/1.9/#deprecated-activate-method) * "Eso es según ese usuario, sin embargo, no he tomado el tiempo para analizar el problema yo mismo. –

8

Después de la actualización de JQuery UI no hay un método "activo" en el acordeón. Por lo tanto, para contraer todos los acordeones utilizan:

$('.accordion').accordion('option', {active: false}); 
+0

tío tío, esto me salvó! – Janpan

+0

También se puede contraer un solo panel con: $ ('. Accordion'). Accordion ('option, {active: false}, idx); - donde 'idx' es su número de panel, basado en cero. – jomofrodo

0

Usando Bootstrap:

//To Expand 
    var elem = $(this).find('.accordionElement'); 
    elem.addClass("in"); 
    elem.attr("style",""); 
    elem.attr("aria-expanded",true); 

entonces se podría colapsar usando:

var elem = $(this).find('.accordionElement'); 
    elem.removeClass("in"); 
    elem.attr("style","height: 0px;"); 
    elem.attr("aria-expanded",false); 
Cuestiones relacionadas