0

私は、Internet Explorer 8 を除くすべてのブラウザーで正常に動作する jQuery を使用しています (おそらく、以前のバージョンではそれほど心配していませんが)。jQuery の .each 関数を使用して、使用しているかなり柔軟性のない CMS によってページに自動生成された JavaScript 配列のすべての要素をループしています。

たとえば、私の CMS は、次の画像オブジェクトの配列を JavaScript でページに書き込みます。

paths = [];
paths[0] = new Image();
paths[0].src = "/path/to/image1"
paths[1] = new Image();
paths[1].src = "/path/to/image2"
paths[2] = new Image();
paths[2].src = "/path/to/image3"
paths[3] = new Image();
paths[3].src = "/path/to/image4"

次に、jQuery の各関数を使用して、この配列をループ処理し、すべての画像を小さな順不同リストで返します。

問題は、jquery の使用中に

$(document).ready(function() { ... });

FF / Safari / Chromeなどで正常に動作しており、実際に順序付けされていないリストをすぐにレンダリングできる.画像配列のコードの後に​​含まれています)。IE で「paths is null/undefined」エラーがスローされるため、これを知っています。

から変えたところ

$(document).ready(function() {

$(window).load(function() {

私のコードは、ページ全体がロードされた後にのみ jquery の「各」関数を実行するため、IE で正常に機能しました (レンダリング時間が遅くなり、やろうとしていることで「ラグ」が発生するため、これは最悪です...しかし、それが機能する場合はちょっと)。ただし、Web サイトがキャッシュされている場合、「パス」という名前の配列が存在することを登録する前に、IE が $(window).load を使用しているときに各関数を起動することがあるようです。

私の各関数が失敗しないように、パス変数がIEによってすぐに登録されることを確実にする確実な方法を誰かが知っていますか?

4

2 に答える 2

3

これは

$(document).ready(..)

いいえ

$('document').ready(..)
于 2010-10-10T18:30:54.937 に答える
1

明白なことを述べて申し訳ありませんが、2 つのコードは同じスクリプト /file 内にありますか? あなたはIEが他のブラウザと違ってシーケンスが間違っていると言っているので、一方または両方が非同期であるかどうか疑問に思っています。

もう 1 つの明白なことは、関数で paths 配列が null でないことを確認することです。これにより、エラーがスローされなくなります。申し訳ありませんが、このコメントでマウスを画面に投げつけた場合。関数を呼び出すためのパス配列を生成する関数を取得する方法、または少なくともブール値を設定する方法はありますか?

おそらく、ページの別の場所で関数を定義して、jquery に次のように実行させることができます。

于 2010-10-10T19:21:59.683 に答える