Domanda

Ho creato una serie di fisarmoniche in una pagina utilizzando il plugin jQuery fisarmonica in modo da poter implementare apri tutto e comprimere tutte le funzionalità.

Ogni elemento ID è il proprio fisarmonica e il codice qui sotto lavora per chiuderle tutte, non importa quali sono già aperte:

$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
    .accordion("activate", -1)
;

Il mio problema è con il espandi tutto. Quando ho tutti ampliare con questo codice:

$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
    .accordion("activate", 0)
;

Alcuni contratto e alcuni si espanderà in base al fatto che siano o meno in precedenza aperti.

La mia idea per correggere questo era al collasso tutti e quindi espandere tutti quando il espandi tutto è stato fatto clic. Questo codice, tuttavia, non viene eseguito correttamente:

$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
    .accordion("activate", -1)
;
$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
    .accordion("activate", 0)
; 

Si colpirà solo il secondo comando e non chiuderle tutte prima. Qualche suggerimento?

È stato utile?

Soluzione

Non sono esattamente sicuro di quello che stai dopo, ma questa è la mia ipotesi migliore. Fuori di tutte le fisarmoniche, si desidera che il "aperto tutto" per aprire tutte le fisarmoniche che sono chiuse (cioè, nessuna sezione sta mostrando). Farei che utilizzando filter()

$("#contact, #address, #email, #sales, #equipment, #notes, #marketingdata")
    .filter(":not(:has(.selected))")
    .accordion("activate", 0)
;

E 'questo che eravate dopo?


Modifica per spiegare che la funzione di filtro:

La funzione di filtro viene eseguito solo la selezione corrente attraverso un filtro, eliminando tutto ciò che non corrisponde. Ha due forme differenti: uno in cui si passa una query regolare jQuery in, come ho fatto in precedenza, e l'altro in cui è possibile definire una funzione per filtrare. Se la funzione restituisce falso, allora questo elemento viene rimosso.

In questo caso la query rimuove tutto ciò che non lo fa (:not) hanno (:has) un bambino con classe "selezionato" (.selected). Ho usato il selettore .selected qui perché è quello che la fisarmonica aggiunge al pannello attualmente aperto.

Se si aveva solo una fisarmonica, o avete dato ciascuno dei vostri fisarmoniche una sorta di identificazione, come ad esempio un nome di classe, allora si potrebbe ridurre notevolmente l'intero script. Diciamo che per ogni elemento che si desidera trasformare in una fisarmonica, si dà la classe "accordo".

$(".accord:not(:has(.selected))").accordion("activate", 0);

Questo è molto più leggibile e gestibile, dal momento che è possibile aggiungere facilmente ulteriori fisarmoniche in futuro, se lo si desidera e questo gestirlo.

La documentazione per il filtro è qui: http://docs.jquery.com/Traversing/filter

Altri suggerimenti

jQuery('#accordion').accordion({        
    active:-1,
});

Ho avuto lo stesso problema e risolto con un po 'codice breve sfruttando la funzione di JQuery ciascuna () a crollare durante l'impostazione di messa a fuoco alla voce [0] di navigazione in modo normale può riprendere.

http://spstring.jeffthink.com/?p=49

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top