1

外部 HTML をロードしたいと思います。さらに、外部 HTML には JavaScript コードが含まれています。load 関数はこのスクリプトをロードしないため、getScript を使用する必要があります。

<div id="external-content"></div>

<script type="text/javascript">
  $("#external-content").load("external.html #myid", function() {
    // do something
  });
  $.getScript("external.js");
</script>

これは、external.js に $(document).ready コマンドがなく、external.html の要素にアクセスしようとしない限り、魅力的に機能します。イベントの発生が早すぎるように思えます。コマンド $.getScript("external.js"); も入れようとしました。.load コールバックに入れましたが、成功しませんでした。external.html を個別に歌い、external.js を直接含めると期待どおりに動作することに注意してください。

4

1 に答える 1

0

残念ながら、このタイミングには意味があります (つまり、これは正しい動作です)。タグ内のスクリプトは、external.html の取得を起動し、それが返されるのを待たずに、external.js の取得に進みます。その間、「ベース」ドキュメントはまだロード中であり、externa.html が取得される前に (実際にはおそらく) 完了する可能性があります。

そのため、次のようなタイミング状況に遭遇する可能性があります。

ドキュメントは確かに準備ができており (external.html がロードされていることは、DOM がスクリプト可能であることの条件ではありません)、external.js がロードされて使用可能になっていますが、external.html はまだ完全にロードされていません。ドキュメントの準備完了関数は、external.html の要素が存在する前に (ドキュメントの準備ができているため) 起動します。

このアプローチを継続したい場合は、on()external.js 内で使用して、external.html 内の要素のイベントのベース ドキュメント (#myid) へのリスナーにデリゲートするように、再調整する方法がおそらくあるでしょう。

于 2012-02-29T16:20:56.370 に答える