2010-12-07 11 views
1

私はajaxにいくつかのコンテンツを読み込み、ページ上の既存のコンテンツを新しくダウンロードしたコンテンツに置き換えようとしています。問題は、置き換えられたデータに対してload(handler(eventObject))イベントをバインドする必要があることです。すべての画像がロードされたらトリガーする必要があります。ここで私はこれまで持っているものです。jQuery load-event after replaceWith

$("#mainContentHolder").live("load", function(){ 
    alert("images loaded!") 
}); 

$.get("content.htm", function(data){ 
    $("#mainContentHolder").replaceWith(data); 
    alert("content is loaded!"); 
}); 

は、私は、コンテンツがロードされている警告を参照してくださいが、イメージがロードされ、警告画像に負荷が発生したことはありません前に、それは(私も前bind()代わりのlive()を試してみました)が起こります。 誰かがその修正を知っていますか?

+1

このコンテンツは、画像だけを意味するのか、それとも他の種類の追加リソースがありますか? – Orbling

+0

@negativeこのヒントも読んでくださいhttp://web.enavu.com/daily-tip/daily-tip-difference-between-document-ready-and-window-load-in-jquery/ – kobe

+0

@Orbling、はいイメージ以上のものですが、私は '.get()'ポストバックでそれらをすべて取得すると仮定します。 –

答えて

2

これは、またはあなたの問題ではないかもしれないかもしれないが、それはあなたがAJAXコンテンツのロード時に交換されているために、あなたのイメージのロード機能を付属しているコンテナのようになります。

$("#mainContentHolder").live("load", function(){ //you are attaching to current and future '#mainContentHolder' elements 
    alert("images loaded!") 
}); 

$.get("content.htm", function(data){ 
    $("#mainContentHolder").replaceWith(data); //'#mainContentHolder' element is replaced with something else 
    alert("content is loaded!"); 
}); 

わからない来ているどのようなコンテンツをあなたのAJAX呼び出しから戻ってきますが、#mainContentHolder要素がない場合、画像ロードイベントハンドラがアタッチするためのものはありません。

それはそれではない場合は、このビットもあります:(http://api.jquery.com/load-event/から)

なお、画像はブラウザのキャッシュからロードされた場合にloadイベントがトリガされない可能性があります。この可能性を考慮するために、イメージが準備できたらすぐに起動する特別なロードイベントを使用できます。 event.special.loadはcurrently available as a pluginです。

これらのうちの1つがお役に立てば幸いです。

+0

キャッシュされたオブジェクトに関しては、loadイベントをバインドするときにオブジェクトの '.complete'をチェックする方が簡単です。 – Orbling

+0

うわー、私の愚かな、ありがとう、あなたは正しい。何らかの理由で、私は 'replaceWidth'がコンテナの内容を置き換えると仮定しました。私は試してみる –

+1

要素全体を置き換えるのではなく、内容を置き換えたい場合は、 '.replaceWith()'の代わりに '.html()'を使うことができます。以下のドキュメントをご覧ください:http://api.jquery.com/html/ – Ender

0

ライブロード機能に$ .getを入れることは可能ですか?

$("#mainContentHolder").live("load", function(){ 
    alert("images loaded!"); 
$.get("content.htm", function(data){ 
    $("#mainContentHolder").replaceWith(data); 
    alert("content is loaded!"); 
}); 
}); 
+0

"画像読み込み済み"ハンドラは "コンテンツ読み込み済み"ハンドラの直後にトリガされるため、私の場合ではありません。申し訳ありませんが、私の説明が十分明確でない場合。 –

+0

replaceWith(data)の後に.live( "load"、function()...を置くのはどうですか? – bozdoz