2011-08-21 12 views
9

複数の画像をプリロードしようとしていますが、すべての画像がロードされるまで私のページを保留にしたいと思います。だから私がやっていることはこれです:jQuery load()イベントのIE9で問題が発生しない

var numPics = $('#bg img').length; 
var picsLoaded = 0; 
$('#bg img').load(function(){ 
    picsLoaded++; 
    if (picsLoaded == numPics){ 
     buildPage(); 
    } 

}); 

これは、(あなたが推測した)IE以外のすべてのブラウザで問題なく動作します。何らかの形でInternet Explorerがすべての画像をダウンロードします(私はそれらがdev-toolsに読み込まれているのがわかります)。load -Eventをランダムに起動します(リフレッシュするたびに新しい番号が与えられます)。私はさまざまなバージョンのjQuery(最初は1.6.1で始まった)を試してみましたが、このサイトでこのような問題についても読んでいますが、まだ答えが見つかりませんでした。それをつぶし(またはイメージソースにランダムなクエリ文字列を追加する)などの関連問題は違いはありませんでした

答えて

15

イベントをトリガするために再割り当てイメージソースにしてみてください。

その答えに
+0

うわー、おかげで、これはうまく動作します! IEがこれを受け入れる理由と、古いバージョンではないことを教えてください。 – m90

+0

一言で言えば?マイクロソフトしかし、他の誰も理解できないような、 "設計によって"愚かな行動。 –

+0

これは私が期待していたものですが、私はもう一度論理的な説明をしたいと思いました!ありがとう! – m90

0

+:Firefoxの3.6でこれを実行しないでください:

img.attr("src", img.attr("src")); 

画像のいくつかの量がロードされません!私が好む:またpuchuさんのコメントが面白いです

image.bind('load', function() {}); 

:jQueryの1.8、$の.LOAD(のよう

if($.browser.msie && parseInt($.browser.version, 10) >= 9) { 
    img_load.attr("src", img_load.attr("src")); 
} 
2

を)の賛成で(http://bugs.jquery.com/ticket/11733)推奨されていません。しかし$ browserは非難され、UAスニッフィングを使用しています。このスニペットは、https://gist.github.com/527683Javascript IE detection, why not use simple conditional comments?を参照)を行う必要があります。

編集:このバグはIE 10にも残っています。また、リンクされたgist snippetもIE 10は検出されませんが、回避策のコメントがあります。

+0

良い点は、通常jQueryのドキュメントでは減価償却されていると言われていますが、この例ではそうではありません。 +1 –

0

は、できるだけ多くの示唆ダイナミックなソースを作成しないでください、あなたがしなければならないすべてはそのようloadイベントを結合した後、ソースを適用している...

$("img").load(function() {alert("loaded!"}).attr("src", imgSource);

関連する問題