2010-12-20 1 views
7

あるとき、私は新しいイメージがロードされるときにキャッチするイベントを必要とする...jqueryの:のイベントAJAXロードされたコンテンツは、(画像を含む)すべてのロードされた私は、AJAXを経由して、いくつかのHTMLにロードしています

becuaseそれはdiv要素ではなく、ページ全体では、私は$(window).load(....

を使用することはできません、私は次のことを試してみたが、それは動作しません:

$('.banners_col img:last').load(function(){..... 
+2

こんにちは、良い質問! –

+0

私はコードのいくつかのサンプルコードを投稿 –

答えて

7

あなたはAJAX呼び出しの結果をターゲットにする必要がありますそれらをdomに挿入する前に

このため、jQueryが提供するコールバックメソッドを使用する必要があります。

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

}); 

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


Ajaxのレスポンス内に複数の画像がある場合に、それらのすべては、この少し変更したバージョンを使用してロードされたときに、通知を受けるにしたい

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

}); 

例:http://www.jsfiddle.net/gaby/Sj7y2/1/


あなたはコメントや空行を削除すると、多くのコード:)そう脅迫されませんではない..です

+1

申し訳ありません私はより早く返信していない。このソリューションは徹底したテストを受けて、ほとんどそこにあります。私が遭遇している唯一の問題は、キャッシュからのイメージが '.load()'イベントを引き起こさないように見えるということです。イメージがキャッシュされた場合、img_countは短くなります.... – Haroldo

+0

@Haroldo、それは私のためにうまく動作します..もしあなたがキャッシュされているにもかかわらず、あなたがコードを再実行した場合、2番目のリンク(例)をチェックすると、loadイベントは再び発生します。 ?あなたのコードの実際の例を置くことができればそれは役に立つでしょう。 –

+0

この解決策はうまくいきます。イメージがロードされているときに "Loading ..."ダイアログのようなものを表示し、最後のイメージがロードされたときにダイアログを削除する場合は、上記のコードを変更して最後のイメージにload()メソッドをアタッチしますタグ: $( 'img:last'、$ live).load(function(){...}); –

-3

はAJAXからHTML要素のためのイベントをトリガするために、ライブ機能を使用してみてください

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

これは間違っています。 'change'イベントは、' input'/'textarea /' select'要素に対してのみ発生します。 [documentation](http://api.jquery.com/change/)を確認してください。 –

関連する問題