2009-12-14 6 views
10

Non riesco a capire come farlo, o se posso farlo. Ho una fisarmonica UI jQuery, più sezioni con ogni sezione contenente più tag di ancoraggio ciascuno con un id stringa univoco.jQuery UI Fisarmonica attiva

Mi piacerebbe essere in grado di avere la fisarmonica aperta su dove si trova un particolare elemento con un determinato ID. Come dire id "item117". Posso usare qualcosa come

$('#accordion').activate('activate','#item117'); 

o anche

$('#accordion').activate('activate',117); 

Ho provato queste e alcune varianti, ma non riesco a farlo andare. Nel caso stavo cercando di lavorare, la fisarmonica avrebbe dovuto aprirsi alla fine della seconda sezione.


Non riesco ancora a ottenere questo, quindi forse sto facendo anche qualcos'altro. L'ho ridotto ad una pagina di esempio qui: http://www.ofthejungle.com/testaccordion.php Si prega di dare un'occhiata a esso e la sua fonte.

+0

Si sta utilizzando la versione più recente ui jQuery? Credo che la funzione utilizzata per essere 'cambiare' non' attivare' – Basic

+0

Si prega di notare che questa domanda è stata posta nel 2009. Quando si guardano le risposte controllare la data della risposta per vedere se è tempestivo per voi. – eflat

risposta

0

Prova

$('#accordion').activate('#item117'); 

o

$('#accordion').activate(document.getElementById('item117')); 

La sintassi corretta per l'attivazione di una fisarmonica è

$(".selector").activate(var index) 

dove l'indice è String, Element, booleano, numero, JQuery

8

Devi chiamarlo utilizzando la funzione chiamata accordion:

// Open the third set (zero based index) 
$('#accordion').accordion('activate', 2); 

Per aprire una sezione contenente un elemento specifico, si potrebbe fare qualcosa di simile. Nota: è necessario selezionare il trigger che normalmente apre e chiude la sezione. Nei documenti questo è un elemento h3, il tuo elemento di attivazione potrebbe essere diverso, quindi cambialo di conseguenza.

$('#accordion').accordion('activate', '#accordion > div:has(#item117) > h3'); 
+0

è documentato nell'interfaccia utente di jQuery ovunque? – CoryDorning

+1

Nell'interfaccia utente jQuery 1.10.2 viene visualizzato l'errore: 'nessun metodo 'attivo' per l'istanza del widget fisarmonica ' – nnyby

+0

Penso che tu intenda attivo, non attivo. – ygesher

3

Ho avuto lo stesso problema con l'attivazione di una fisarmonica con #id. Purtroppo non avevo trovato un modo per farlo, quindi ho creato un trucco. Ho iterato attraverso gli elementi div nella mia fisarmonica per ottenere l'indice di interessante div. Ecco come si presenta:

acc = 'tab-you-are-interested-in'; 

// find corresponding accordion 
act = 0; 
panels = $('#accordion-element > div'); 
for (i=0; i<panels.length; i++) { 
    if (panels[i].id == acc) { 
     act = i; 
    } 
} 

$('#accordion-element').accordion('activate', act); 
+0

proprio quello che stavo cercando per questo momento! – SchweizerSchoggi

9

Questo fine ha funzionato per me:

$("#accordion").accordion("activate", $("#h3-id")); 

NOTA !!! L'id deve essere quello dell'elemento <h3> che si desidera aprire (nell'impostazione predefinita della fisarmonica).

10

per me ha funzionato

$("#accordion").accordion({active:"h3:last"}) 
0

È anche possibile attivare e disattivare la fisarmonica in questo modo:

// Add the class ui-state-disabled to the headers that you want disabled 
$(".whatyouwantdisabled").addClass("ui-state-disabled"); 

Per riattivare la scheda:

// Remove the class ui-state-disabled to the headers that you want to enable 
$(".whatyouwantenabled").removeClass("ui-state-disabled"); 
+0

Questo non funziona per me. Le classi si aggiungono, tuttavia, la fisarmonica non reagisce. – Mateng

11

sono stati su questo troppo & trovata bella e soluzione universale
- emulare cliccando l'intestazione del elemento richiesto per la sua id

$('#header-of-item-258').click(); 

che funziona ogni volta e ovunque non solo la fisarmonica

+0

Mi piace e lo uso per varie esigenze di menu dispari. Ma mi piace usare la funzionalità integrata, ove possibile. Quindi ho +1 tu e @BTR :) – Bradmage

2

Quando si clicca su un colpo di testa, è elemento H3 e si apre la prossima div..that è la funzionalità. Ora, per attivare, è necessario fornire l'indice o l'elemento. indice potrebbe essere diverso dal tuo id. quindi vorrei usare:

$('.selector').accordion('option', 'activate', $(h3#id)); 

Se si dispone di indice, è possibile utilizzare that..But maggior parte dei casi, se è stato creato a fisarmonica in modo dinamico, non è facile da ottenere indice di un id. Potete trovare indici come questo ..

var processingHeaders = $('#accordion h3'); 
for (i = 0; i < processingHeaders.length; i++) { 

     ids.push($(processingHeaders[i]).attr('id')); 
     idsForLaterChecks.push($(processingHeaders[i]).attr('id')); 
    } 

ora ho id .. utilizzando indexOf: trovare l'indice nella matrice e usarlo ..

Nota: // idsForLaterChecks è globale

0

Ecco un altro modo.

Includere un ID = "someId" in ognuno dei tag di intestazione H3 della fisarmonica e denominare l'ID univoco.

Per esempio, questo id sarebbe in serie 'AccjA' il prossimo h4 sarebbe 'AccjB':

<h4 class="Accj" id="AccjA"> 
     <a href="#settings">A Fan?</a> 
</h4> 

Attivare quindi a seconda di quale pannello che si desidera con:

$('#Accjoin').accordion('activate', '#AccjoinA') 

ho usato quanto sopra su un timeout per attirare l'attenzione dell'utente dopo che la pagina viene caricata con un ritardo di 2 secondi utilizzando la funzione ".doTimeout" di Ben Alman come:

$.doTimeout(2000, function() { 
    $('#Accjoin').accordion('activate', '#AccjoinA') 
}); 
+0

Quanto sopra non funziona ora con 1.9. Come Jeremy Zerr sottolinea ora. jQuery 1.9. + ha un setter differente !! http://api.jqueryui.com/accordion/#option-active –

-1

Whatch l'API jquery

Attiva il secondo contenuto della Fisarmonica contenuta in.

$(".selector").activate(1) 

Chiudere tutte le parti di contenuto della fisarmonica.

$(".selector").activate(false) 

Attiva il primo elemento che corrisponde all'espressione specificata.

$(".selector").activate("a:first") 
12

Da documentazione:

// getter 
var active = $(".selector").accordion("option", "active"); 

// setter 
$(".selector").accordion("option", "active", 2); 
1

Con jQuery 1.9+ il:

$('#accordion').activate('activate', elementSelector); 

è ora:

$('#accordion').activate('option', 'active', elementSelector); 

Se si trova più facile da usare metodi che attraversano, se hai HTML come questo:

<div id="accordion"> 
    <h3><a href="#">Section</a></h3> 
    <div> 
     <p id="#item117" class="item"> 
      <a class="link-active" href="">Item 117</a> 
     </p>    
    </div> 
</div> 

provare questo:

var myh3 = $('#item117').parent().prev('h3'); 
$('#accordion').accordion('option', 'active', myh3);