2010-12-20 10 views

Antwort

7

Sie müssen die Ergebnisse der ajax-Aufruf an Ziel bevor Sie sie in das Dom einfügen.

Sie müssen aus diesem Grund die von jQuery bereitgestellte Rückrufmethode verwenden.

$('#load').click(function(){ 
    // inside the handler that calls the ajax 

    //you ajax call here 
    $.get('the_url_to_fetch',function(data){ 

     // create an in-memory DOM element, and insert the ajax results 
     var $live = $('<div>').html(data); 

     // apply a load method to the images in the ajax results 
     $('img',$live).load(function(){ 
      // what to do for each image that is loaded 
     }); 

     // add the ajax results in the DOM 
     $('selector_where_to_put_the_response').html($live.children()); 
    }); 

}); 

Beispiel bei http://www.jsfiddle.net/gaby/Sj7y2/


Wenn mehrere Bilder in der Ajax-Antwort sind und Sie möchten benachrichtigt werden, wenn alle von ihnen geladen werden, dann verwenden Sie diese leicht modifizierte Version

$('#load').click(function(){ 
    // inside the handler that calls the ajax 

    //you ajax call here 
    $.get('the_url_to_fetch',function(data){ 

     // create an in-memory DOM element, and insert the ajax results 
     var $live = $('<div>').html(data); 
     // count the number of images 
     var imgCount = $live.find('img').length; 

     // apply a load method to the images in the ajax results 
     $('img',$live).load(function(){ 
      // what to do for each image that is loaded 

      imgCount--; 
      if (imgCount==0) 
      { 
       // the code in here is called when all images have loaded. 
      } 
     }); 

     // add the ajax results in the DOM 
     $('selector_where_to_put_the_response').html($live.children()); 
    }); 

}); 

Beispiel bei http://www.jsfiddle.net/gaby/Sj7y2/1/

Wenn Sie die Kommentare und die leeren Zeilen entfernen, ist es nicht viel Code :) also nicht einschüchtern ..

+1

Entschuldigung, ich habe nicht früher geantwortet. Gerade mit dieser Lösung eine gründliche Prüfung und es ist fast da. Das einzige Problem, auf das ich stoße, ist, dass Bilder aus dem Cache kein '.load()' -Ereignis verursachen, so dass im Falle von zwischengespeicherten Bildern der img_count zu kurz kommt .... irgendwelche Ideen? – Haroldo

+0

@Haroldo, es funktioniert gut für mich .. Wenn Sie den zweiten Link (Beispiel) überprüfen, wenn Sie den Code ausführen, das Load-Ereignis erneut ausgelöst wird, obwohl sie zwischengespeichert werden ... sind Sie sicher, dass nicht etwas anderes los ist ? Wenn Sie ein Live-Beispiel Ihres Codes nicht arbeiten können, wäre es hilfreich. –

+0

Diese Lösung funktioniert gut. Wenn Sie möchten, dass etwas wie ein "Laden ..." -Dialog erscheint, während die Bilder geladen werden, und dann den Dialog entfernen, wenn das letzte Bild geladen wurde, habe ich den obigen Code modifiziert, um die load() -Methode an das letzte Bild anzuhängen tag: $ ('img: last', $ live) .load (funktion() {...}); –

-3

Try Live-Funktion zu verwenden Ereignis für HTML-Elemente von Ajax zu triggern

$('.banners_col img:last').live('change',function(){..... 
+3

Das ist falsch. Das Ereignis 'change' wird nur für' input'/'textarea' /' select' Elemente ausgelöst. Überprüfen Sie die [Dokumentation] (http://api.jquery.com/change/). –

Verwandte Themen