2011-01-13 14 views
8

Per impostazione predefinita, esistono intestazioni di contenuti per controllare l'espansione/compressione. Tuttavia, nella mia situazione, potrei espandere/comprimere il contenuto anche da altri elementi. Ad esempio:Posso espandere/comprimere il contenuto di JQuery ui Fisarmonica facendo clic anche su altri elementi?

la struttura di base del codice 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> 

e ora. Ho altri elementi, come:

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

grazie mille !!

risposta

5

È possibile utilizzare .activate con false passate per comprimere tutti gli elementi a livello di codice. Dal momento che hai sempre un elemento aperto alla volta, questo funzionerà per comprimere qualsiasi elemento aperto mostrando questo link. Funzionerà solo se hai collapsible impostato su true.

È possibile passare in quale altro elemento si desidera espandere per espandere quell'elemento al clic.

+1

+1, ma l'opzione è ora chiamato 'attiva' solo – gotqn

9

Collapse scheda fisarmonica:

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

espandere Primo scheda fisarmonica:

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

Grazie. Mi hai salvato da giocherellare e apprezzo molto la tua soluzione. – Ace

+0

Questo suggerimento ha funzionato per me. +1. Ho appena dovuto cambiarlo con questo: ['$ ('. Accordion'). Accordion ('option', 'active', false);' per jQuery UI '1.11'] (http://api.jqueryui.com/fisarmonica/# opzione attiva). Grazie! – mhulse

5

ho a avuto difficoltà a raggiungere le Fisarmoniche per comprimere/espandere dopo erano state caricate inizialmente. Per ovviare a questo ho usato:

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

... che imita cliccando l'area di intestazione e costringerà alternare le classi di attivazione.

Mi sono sentito come un hack, ma è quello che ha funzionato, Best.

+0

Secondo [il "commento" di questo utente] (http://stackoverflow.com/a/24591516/456814): il metodo "*' activate' è stato ritirato da jquery ui 1.9 e rimosso da 1.10+. Ulteriori informazioni su di esso e nuova sintassi può essere trovata in [Guida all'aggiornamento di jQuery 1.9 UI] (http://jqueryui.com/upgrade-guide/1.9/#deprecated-activate-method) * "Questo è però secondo l'utente, non ho preso il tempo per esaminare me stesso la questione. –

8

Dopo l'aggiornamento dell'interfaccia utente di JQuery non è presente alcun metodo "attivo" su fisarmonica. Quindi, per comprimere tutte le fisarmoniche usano:

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

thx amico, questo mi ha salvato! – Janpan

+0

Può anche comprimere un singolo riquadro con: $ ('. Accordion'). Fisarmonica ('opzione, {attivo: falso}, idx); - dove 'idx' è il tuo numero di riquadro, a base zero. – jomofrodo

0

Utilizzando Bootstrap:

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

allora si potrebbe crollare utilizzando:

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