2009-10-04 6 views
0

J'ai créé des listes déroulantes dépendantes dans une chaîne. Celui en haut devrait déclencher plusieurs demandes Ajax pour chaque liste déroulante ci-dessous.jQuery ne peut pas déclencher de modification après la mise à jour DOM

J'utilise jQuery 1.3.2 avec livequery si les gestionnaires d'événements devraient être lier pour tous les éléments DOM rechargées, mais le déclenchement changement ne se produit pas pour les nouveaux éléments mis à jour.

Qu'est-ce que je fais de mal ici?

function dropDown_CHILD() 
{ 
    jQuery.ajax({ 
     'async': false, 
     'url':..., 
     'data':..., 
     'cache':false, 
     'success':function(html){ 
      $('#CHILD_unavailable').empty(); 
      $('#CHILD').replaceWith(html); 
     }, 
     'complete': function(request, status){ 
      $('#CHILD').trigger('change'); 
     }, 
     'error':function(a,b,c){alert('An error occurred, please try again.');} 
    }); 

} 
$('#PARENT').livequery('change', dropDown_CHILD); 

Et même est généré pour ENFANTS DE L'ENFANT, ainsi, ce qui devrait appeler son gestionnaire aussi bien en fonction complete, devrait-il pas?

Mise à jour:Now you can see it on-the-fly.

Merci beaucoup à l'avance.

+0

Avez-vous un test-case en direct? Cela aiderait vraiment. –

+0

Je dois obtenir l'approbation de mon client, cela prend un certain temps. – pestaa

+0

Vous pouvez simplement le dupliquer et supprimer toute information spécifique au client :) –

Répondre

0

J'ai finalement résolu ce cas en remplaçant le plug-in avec Ajax Listen Plugin, qui met un écouteur droit sur l'objet DOM document.

Il est maintenant conscient de toutes les instances indépendamment de la façon dont DOM mis à jour.

2

Peut-être « replaceWith » supprime l'élément avant d'insérer le remplacement afin que votre événement est non liée:

Lorsqu'un élément ne correspond plus à un sélecteur les événements en direct la requête liée à elle ne sont pas liés. La requête en cours peut être expirée, ce qui ne liera plus les événements et dissociera tous les événements précédemment liés. (livequery doc)

+0

Remplacer supprime l'élément, mais en ajoute un autre avec le même ID. Quelles autres façons suggéreriez-vous? – pestaa

+0

Pour contourner ce problème, vous pouvez utiliser la fonction déclenchée en remplacement du .trigger ('change'). PS: reproduisez-vous le problème lorsque le deuxième choix a 2 éléments? –

+0

Les fonctions déclenchées ne connaissent que les éléments parents et enfants. Il ne devrait pas savoir sur l'enfant de l'enfant, puisque c'est facultatif. Et oui, le bug existe indépendamment du nombre d'éléments. – pestaa

Questions connexes