Pergunta

Eu configurei uma série de acordeões em uma página usando o jQuery acordeão plug-in para que eu possa implementar expandir todos e recolher todas as funcionalidades.

Cada elemento ID é a sua própria acordeão e o código abaixo funciona para fechá-los todos, não importa quais as que já estão abertos:

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

Meu problema é com a expandir tudo. Quando eu tê-los todos expandir com este código:

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

Alguns vão contratar e alguns vão expandir com base em se eles são ou não previamente aberto.

A minha ideia para corrigir isso era para recolhê-los todos e, em seguida, expandir-los todos quando a expandir tudo foi clicado. Este código, porém, não irá executar corretamente:

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

Ele só vai bater o segundo comando e não fechar todos eles em primeiro lugar. Alguma sugestão?

Foi útil?

Solução

Eu não sei exatamente o que você está depois, mas este é o meu melhor palpite. Fora de todos os seus acordeões, você quer "abrir todos" botão para abrir todos os acordeões que são fechadas (ou seja, nenhuma seção está mostrando). Eu faria isso usando filter()

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

É isso que você estava atrás?


Editar para explicar que a função do filtro:

A função de filtro apenas executa a seleção atual através de um filtro, removendo qualquer coisa que não corresponde. Tem duas formas diferentes: uma onde você passar uma consulta jQuery regular, como eu fiz acima, e outro onde você pode definir uma função para filtrar. Se a falsa função retorna, em seguida, esse elemento é removido.

Neste caso, o remove de consulta qualquer coisa que não faz (:not) tem (:has) uma criança com classe "selecionada" (.selected). Eu usei o selector .selected aqui porque é isso que o acordeão adiciona ao painel atualmente aberto.

Se você só tinha um acordeão, ou você deu a cada um de seus acordeões algum tipo de identificador, como um nome de classe, então você pode reduzir muito o roteiro inteiro. Vamos dizer que para cada elemento que você deseja transformar em um acordeão, você dá o "acordo" de classe.

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

Isso é muito mais legível e de fácil manutenção, pois você pode facilmente adicionar mais acordeões no futuro, se desejar e isso vai lidar com isso.

A documentação do filtro é aqui: http://docs.jquery.com/Traversing/filter

Outras dicas

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

Eu tive o mesmo problema e resolveu-lo com algum código curto alavancar cada função do jQuery () ao colapso durante a configuração foco para item [0] navegação tão normal pode continuar.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top