jQuery Accordion et chargement de contenu via AJAX
Je voudrais charger le contenu sous chaque jQuery accordéon en-tête à l'aide de jQuery charge de commande. Actuellement, j'ai mis cela de la manière suivante
$(function() {
$("#accordion").accordion({
header: "h2",
active: false
});
$("h2", "#accordion").click(function(e) {
var contentDiv = $(this).next("div");
contentDiv.load($(this).find("a").attr("href"));
});
});
et le HTML (pertinentes extrait de)
<div id="accordion">
<div>
<h2><a href="home.htm">Home</a></h2>
<div>
<!-- placeholder for content -->
</div>
</div>
<div>
<h2><a href="products.htm">Products</a></h2>
<div>
<!-- placeholder for content -->
</div>
</div>
</div>
Maintenant ça fonctionne bien, mais il ya un problème de chargement du contenu de cette manière interrompt le glisser vers le bas de l'animation de l'accordéon plugin sur certains navigateurs (IE6), et sur d'autres (FF), la glisser vers le bas de l'animation ne se produit pas.
Je pense que j'aurais besoin de prévenir le glisser vers le bas de l'animation de se produire jusqu'à ce que le contenu est chargé (à l'aide de la charge en fonction de rappel), mais je suis pas sûr de la façon de crochet présent dans l'accordéon plugin.
Des idées très apprécié!
- vous pouvez poster votre solution finale?
- J'ai posté cette question il y a longtemps et je ne me souviens plus de la solution que je suis allé en fin de compte. Je vais voir si je peux revoir tout cela et d'obtenir une réponse définitive
Vous devez vous connecter pour publier un commentaire.
Juste un petit heads-up.
Aucune de ces réponses seront comme prévu avec la dernière API depuis l'INTERFACE utilisateur de jQuery 1.9 les événements
change
etchangestart
ont été modifiés pour ' activer " et " beforeActivate ' respectivement.Espoir qui sauve quelqu'un en quelques minutes.
Cela devrait résoudre votre problème:
Le truc c'est que l'accordéon changements les classes de la vivre conteneur, de sorte que vous pouvez utiliser .find() pour localiser l'actif de l'accordéon et d'exécuter une action sur elle.
change: function(event, ui) { ... }
beforeActivate
. Aussi, vous pouvez obtenir l'en-tête qui est sur le point d'ouvrir viaui.newHeader
J'ai exécuté le même problème en essayant de charger l'accordéon à l'ajax onglets avec Jquery UI.
L'accordéon ne peut pas être initialisé avant de le détruire.
Ici est un exemple de code javascript:
Je viens de faire quelque chose de similaire, et a trouvé l'astuce a été de charger le contenu d'une requête ajax dès que le DOM est prêt, et de permettre à l'accordéon, à la demande de la fonction de rappel.
J'ai essayé de le faire avec jquery la fonction de charge, mais avait du mal, s'est retrouvé à l'aide de la fonction ajax à la place.
Dans votre cas, avec de multiples appels ajax, je suppose que vous pourriez nid de chacun dans la fonction de rappel de la précédente. Ce qui est vraiment horriblement inefficace façon de le faire, mais si ils sont juste de petits fichiers texte qu'il devrait être ok.
exemple comme suit:
qui devrait le faire...
Ici est la plus simple et la meilleure façon de le faire
J'ai fait ça avant, permettez-moi de le copier et de le coller ici.
Les trucs à l'intérieur
{}
contient des scripts côté serveur et c'est en fait une boucle pour imprimer le contenu de plusieurs accordéons. Voici le javascript:Ce qui devrait résoudre le problème de chargement de l'accordéon avant qu'il soit activé:
Il suffit de penser à l'extérieur de la boîte pour un moment, est-il une raison pour laquelle vous êtes à l'aide d'ajax pour charger le contenu? Il semble, à partir de votre exemple au moins, comme si le contenu peut seulement être chargé au départ et être fait avec elle.
Que pour réellement question, avez-vous essayé quelque chose comme ceci:
ou exploré tout autre moyen de votre chargement peuvent interférer avec l'accordéon de vue de l'arborescence DOM? (par exemple, en essayant de chargement plus profondément imbriqués div)?
Peut-être que ce n'est pas tout à fait la même que ce qui est en train de parler ici, mais beaucoup de ces extraits m'ont aidé à obtenir ma solution de travail alors je voulais le partager au cas où quelqu'un d'autre doit le faire (exactement!) ce que je devais faire.
je voulais charge externe des fragments de contenu en accordéon, mais le faire pour redimensionner correctement etc a été fiddley, voici ma solution:
Espère que cela aide quelqu'un =)
Oh, et je devrais avoir mentionné que, bien évidemment, dans le ajax_content.html fichier il y a un div avec le même id que chacun de l'accordéon panneaux de sorte qu'il sait ce qu'il faut mettre où!
C'est en fait beaucoup plus facile que vous êtes tous à faire!
Dans votre doc fonction ready:
et votre html
J'Ai eu affaire à ce problème, à l'aide de jquery 1.4 et voici comment je l'ai résolu. Le "ui" objet a deux importantes propriétés "newContent" et "newHeader". J'ai utilisé newContent et de mettre un id sur la div qui contiendra le contenu. J'ai aussi caché balise d'entrée pour contenir les données importantes, C'était un peu plus propre.
Je crois que c'est la réponse la plus simple de ne pas encore donné, et répond à toutes les OP exigences... charge AVANT le div est montré, et de manière dynamique selon le href de la balise:
Je cherchais une réponse à la même question, et j'ai essayé quelques exemples ici. Cependant, j'ai été prendre une valeur non définie à l'aide de l'exemple avec ui-state-active:
Je voulais aussi assurez-vous que l' .la fonction de charge a été appelé le premier temps de chaque panneau accordéon a été élargi. En combinant un couple de d'autres affiches des réponses que j'ai obtenu le résultat que je voulais: