Pregunta

He creado una serie de acordeones en una página usando el plugin jQuery acordeón para que pueda aplicar expandir todo y contraer todas las funciones.

Cada elemento de identificación es su propio acordeón y el código de abajo funciona para cerrar todos ellos, no importa cuáles ya están abiertas:

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

Mi problema es con el original en inglés. Cuando tengo a todos expandirse con este código:

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

Algunos se contraiga y algunos se ampliará en función de si son o no previamente abierta.

Mi idea para corregir esto era a colapsar a todos ellos y luego ampliar a todos cuando el expandir todo se ha hecho clic. Este código sin embargo, no se ejecutará correctamente:

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

Sólo se llegará a la segunda orden y no cerrarlos todos de primera. ¿Alguna sugerencia?

¿Fue útil?

Solución

No estoy exactamente seguro de lo que está buscando, pero esta es mi mejor conjetura. Fuera de todos sus acordeones, desea que el "abierto todo el" botón para abrir todos los acordeones que están cerrados (es decir, ninguna sección está mostrando). Que haría que mediante el uso filter()

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

Es eso lo que buscábamos?


Editar para explicar que la función de filtro:

La función de filtro sólo se ejecuta la selección actual a través de un filtro, eliminando todo lo que no coincide. Tiene dos formas diferentes: uno donde se pasa una consulta regular de jQuery, como lo hice anteriormente, y el otro donde se puede definir una función de filtro. Si la función devuelve falso, entonces se elimina ese elemento.

En este caso, la consulta suprime cualquier cosa que no hace (:not) tiene (:has) un niño con clase "seleccionado" (.selected). He utilizado el selector de .selected aquí porque eso es lo que el acordeón se suma al panel abierto en ese momento.

Si sólo te quedara un acordeón, o le dio a cada uno de sus acordeones algún tipo de identificador, como un nombre de clase, entonces se podría reducir en gran medida todo el guión. Digamos que para cada elemento que desee convertir en un acordeón, le das la clase "acuerdo".

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

Esto es mucho más legible y fácil de mantener, ya que se puede agregar fácilmente más acordeones en el futuro si lo desea y esto va a manejar la situación.

La documentación de filtro está aquí: http://docs.jquery.com/Traversing/filter

Otros consejos

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

He tenido el mismo problema y resuelto con un poco de código corto aprovechando cada función de jQuery () para contraer durante el ajuste de enfoque con el punto [0] navegación de modo normal puede reanudarse.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top