2010-12-15 3 views
0

d'abord j'utiliser .ajax $ pour charger le code html dans ma page html

for(var i=0;i<5;i++) 
{ 
    $.ajax({ 
     type: "get", 
     url: "test.xml", 
     async: false, //without set the async to false could cause problem,I also don't konw why 
     dataType: "html", 
     timeout: 2000, 
     success: function (xml) { 
      var $temp_code = $(xml).find("test[id='" + i+ "']").find("html_code").html(); 
      //the html code is like <div class="test"></div>…… 
      $($temp_code).appendTo($(".wrapper")).show(); 
    }); 
} 

Le code pourrait fonctionner bien dans la page, le code html en XML pourrait être lu correctement. ensuite, je veux donner à chaque « test » div se lier à une fonction de clic

comme

 $(".test").click(function() { 
      alert(""); 
     }); 

mais cela ne pouvait pas le succès, cliquez sur chaque rien d'alerte « test »

alors j'essaie de le mettre en $ .ajax complet comme:

$.ajax({ 
    …… 
    complete:function(){ 
      $(".test").click(function() { 
       alert(""); 
      }); 
    } 
}) 

Cela ne pourrait fonctionner pour le premier « test » div, cela signifie cliquer que le premier « test » pourrait alerter

Comment puis-je résoudre ce problème? Laissez le clic fonctionner dans chaque "test",

Merci!

+0

pouvez-vous montrer ce que le fichier xml contient? – Nalum

+0

dans le premier code de l'événement click vous obtenez une erreur javascript – Vivek

+0

@Vivek: En fait, le code d'origine n'est pas comme ça, parce que j'ai demandé ici, donc je simplement le code, et je ne l'ai pas testé. Mais je pense qu'il a exprimer ce que je veux dire – hh54188

Répondre

1

Qu'est-ce que vous voulez quelque chose comme ça, qui est aussi beaucoup plus rapide, car il utilise le résultat de cette requête AJAX (qui devrait être le même) pour la boucle, plutôt que de faire à plusieurs reprises la demande, comme ceci:

$.ajax({ 
    type: "get", 
    url: "test.xml", 
    dataType: "html", 
    success: function (xml) { 
    for(var i=0;i<5;i++) { 
     var $temp_code = $(xml).find("test[id='" + i+ "']").find("html_code").html(); 
     $($temp_code).appendTo($(".wrapper")).show().find(".test").click(function() { 
     alert(""); 
     }); 
    } 
    } 
}); 

ce que cela ne se lie la .click() uniquement aux éléments qu'il vient d'être ajouté, les éléments .test<div> créés par $($temp_code).

0

Essayez d'utiliser .live() (http://api.jquery.com/live/)

+0

J'ai trouvé que .live() peut être peu fiable, alors que $ (document) .delegate() fonctionne toujours, même si cela peut être à un coût de performance plus élevé, mais je n'ai pas se heurter à des problèmes où cela était évident. – Moo

0

Dans le premier fragment de script, vous devez consulter xml.d pour accéder au contenu du retour de votre OBTENIR. Je pense que cela vous permettra également de cliquer sur handler pour travailler.

+0

Ceci est une requête XML, pas une requête JSON enveloppée dans une propriété 'd' par Microsoft :) –

+0

Dans ce cas, cette réponse n'aide pas! Ma faute. – amelvin