Frage

Ich habe eine Reihe von Akkordeons auf einer Seite mit dem jquery Akkordeon-Plugin eingerichtet, so kann ich alle implementieren erweitern und alle Funktionen kollabieren.

Jedes ID-Element ist dann ist es eigenes Akkordeon und der folgende Code funktioniert sich alle, egal zu schließen welche sind bereits geöffnet:

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

Mein Problem ist, mit dem alle erweitern. Wenn ich sie alle erweitern mit diesem Code:

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

Einige werden schrumpfen und einige erweitern basierend darauf, ob oder nicht sie sind vorher geöffnet.

Meine Idee, dies zu korrigieren war, sie alle und dann erweitern sie alle kollabieren, wenn das alles geklickt wurde erweitern. Dieser Code wird jedoch nicht ordnungsgemäß ausgeführt:

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

Es wird traf nur den zweiten Befehl und nicht alle zuerst schließen. Irgendwelche Vorschläge?

War es hilfreich?

Lösung

Ich bin mir nicht ganz sicher, was Sie nach, aber das ist meine beste Vermutung. Aus all Ihre Akkordeons, möchten Sie die „öffnen alle“, um alle Akkordeons zu öffnen, die geschlossen sind (das heißt, kein Abschnitt zeigt). Ich würde das tun, indem filter() mit

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

Ist das, was Sie sind nach?


bearbeiten, die Filterfunktion zu erklären:

Die Filterfunktion läuft nur die aktuelle Auswahl durch einen Filter, alles zu entfernen, die nicht übereinstimmt. Es hat zwei verschiedene Formen: eine, wo man eine regelmäßige jQuery Abfrage in geben, wie ich oben tat, und die andere, wo Sie eine Funktion definieren können, filtern. Wenn die Funktion false zurückgibt, dann wird dieses Element entfernt.

In diesem Fall wird die Abfrage etwas entfernt, die nicht (:not) hat (:has) ein Kind mit Klasse „ausgewählt“ (.selected). Ich habe hier die .selected Wähler, weil das ist, was das Akkordeon fügt den aktuell geöffneten Panel.

Wenn Sie nur ein Akkordeon haben, oder Sie gab jeder Ihre Akkordeons eine Art Kennung, wie ein Klassennamen, dann könnte man stark das gesamte Skript reduzieren. Lassen Sie uns sagen, dass für jedes Element, das Sie in einem Akkordeon machen wollen, können Sie es die Klasse „accord“ geben.

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

Das ist viel besser lesbar und wartbar, da Sie leicht mehr Akkordeons in Zukunft hinzufügen können, wenn Sie wollen, und dies wird damit umgehen.

Die Dokumentation für Filter ist hier: http://docs.jquery.com/Traversing/filter

Andere Tipps

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

Ich habe das gleiche Problem hat und gelöst es mit einigem kurzen Code nutzt jQuerys each () Funktion zu kollabieren, während Fokus auf den Einstelloptionen [0] so normale Navigation wieder aufnehmen kann.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top