Question

J'ai mis en place un certain nombre d'accordéons sur une page en utilisant le plugin accordéon jquery je peux mettre en œuvre tout développer et réduire toutes les fonctionnalités.

Chaque élément d'identification est son propre accordéon et le code fonctionne ci-dessous pour les fermer tous, peu importe ceux qui sont déjà ouvertes:

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

Mon problème est le développer tout. Quand je les ai tout développer avec ce code:

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

Certains contrats et certains se développeront en fonction de si oui ou non ils sont déjà ouverts.

Mon idée de corriger était de les déplier tout, puis les développer tout quand le développer tout a été cliquée. Ce code ne sera cependant pas exécuter correctement:

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

Il ne touche que la deuxième commande et ne pas les fermer tout d'abord. Toutes les suggestions?

Était-ce utile?

La solution

Je ne suis pas sûr de ce que vous êtes après, mais c'est ma meilleure estimation. Sur tous les accordéons, vous voulez que le « ouvrir tous » pour ouvrir tous les accordéons qui sont fermés (qui est, aucune section montre). Je le ferais en utilisant filter()

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

est-ce que vous étiez après?


Modifier pour expliquer cette fonction de filtrage:

La fonction de filtre passe juste votre sélection en cours à travers un filtre, tout ce qui ne supprimant correspond pas. Il a deux formes différentes: celle où vous passez une requête jQuery régulière, comme je l'ai fait ci-dessus, et l'autre où vous pouvez définir une fonction pour filtrer. Si la fonction retourne false, cet élément est supprimé.

Dans ce cas, la requête supprime tout ce qui ne fonctionne pas (:not) ont (:has) un enfant avec classe « choisie » (.selected). Je ici le sélecteur de .selected parce que ce l'accordéon ajoute au panneau actuellement ouvert.

Si vous aviez seulement un accordéon, ou que vous avez donné à chacun de vos accordéons une sorte d'identifiant, comme un nom de classe, alors vous pouvez réduire considérablement le script entier. Disons que pour chaque élément que vous voulez transformer en un accordéon, vous il donner à la classe « accord ».

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

Ceci est beaucoup plus lisible et maintenable, puisque vous pouvez facilement ajouter des accordéons à l'avenir si vous le souhaitez et cela gérer.

La documentation du filtre est ici: http://docs.jquery.com/Traversing/filter

Autres conseils

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

J'ai eu le même problème et résolu avec un code court tirant parti de chaque fonction () de JQuery s'effondrer tout en mettant l'accent au point [0] peut reprendre la navigation si normal.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top