1

我想加载一个外部 HTML。此外,外部 HTML 包含一些 JavaScript 代码。由于加载函数不加载这个脚本,我不得不使用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 将外部.html 内部元素上的事件委托给基础文档 (#myid) 的侦听器。

于 2012-02-29T16:20:56.370 回答