2010-12-15 8 views
0

ersten verwende ich $ Schnipsel HTML-Code in meiner HTML-Seite

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(); 
    }); 
} 

Der Code könnte funktionieren gut in Seite, HTML-Code in XML laden könnte richtig gelesen werden. dann will ich jeden "test" geben div eine Klickfunktion binden

wie

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

aber dies konnte nicht erfolgreich, klicken Sie auf jeden "test" alert nichts

dann versuche ich es in $ zu setzen wie .ajax zu vervollständigen:

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

Dies ist nur für die erste „Test“ div arbeiten konnte, bedeutet dies nur die erste „Test“ klicken konnte

alarmieren Wie kann ich dieses Problem lösen? Lassen Sie den Klick in jedem "Test" arbeiten,

Vielen Dank!

+0

Können Sie zeigen, was die XML-Datei enthält? – Nalum

+0

im ersten Code des Click-Ereignisses erhalten Sie keine Javascript-Fehler – Vivek

+0

@Vivek: In der Tat ist der ursprüngliche Code nicht so, denn ich habe hier fragen, so dass ich einfach den Code, und ich habe es nicht testen. Aber ich denke, dass es ausdrückte, was ich sagen möchte – hh54188

Antwort

1

Was Sie wollen, dass es so etwas wie dieses, das auch schneller viel ist, da sie das Ergebnis dieser AJAX-Request verwendet (die die gleiche sein sollte) für die Schleife, anstatt, der die Anfrage wiederholt, wie folgt aus:

$.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(""); 
     }); 
    } 
    } 
}); 

Was die .click() bindet sich nur auf jene Elemente, die es nur hinzugefügt, die .test<div> von $($temp_code) erstellt Elemente.

0

Versuchen zu verwenden .live() (http://api.jquery.com/live/)

+0

Ich habe gefunden, dass .live() unzuverlässig sein kann, während $ (Dokument) .delegate() immer funktioniert, obwohl es bei einer größeren Leistung Kosten sein kann, aber ich habe es nicht auf Probleme stoßen, wo das offensichtlich war. – Moo

0

Im ersten Skript-Fragmente, Sie xml.d verweisen müssen von dem Inhalt der Rückkehr zum Zugriff auf Ihrem BEKOMMEN.

success: function (xml) { 
      var $temp_code = $(xml.d).find("test[id='" + i+ "']").find("html_code").html(); 

Ich denke, dass dies auch ermöglicht Ihnen Click-Handler zu arbeiten.

+0

Dies ist eine XML-Anfrage, keine JSON-Datei, die von Microsoft in eine 'd'-Eigenschaft eingepackt ist. –

+0

In diesem Fall hilft diese Antwort nicht! Mein Fehler. – amelvin