关于$ .load()的一个奇怪问题

时间:2009-09-10 04:38:54

标签: javascript jquery load

这是我使用$ .load()加载到DOM中的文件:

<script type="text/javascript">
    $('.close').click(function() { alert(1) });
</script>
<div class="close">
    click me
</div>

说,在我看来<script>部分会在加载时自动延迟,这是$ .load()的一个功能吗?

如果是的话,该如何实施?

感觉很棒!

2 个答案:

答案 0 :(得分:9)

我已经阅读了jQuery源代码,这就是我发现的内容:

(行号引用未压缩的jQuery 1.3.2)

  1. jQuery.load最终得到响应并调用jQuery html方法并将结果插入其中。 (第3267行)
  2. jQuery.html然后调用jQuery append方法。 (第488行)
  3. jQuery.append然后使用插入DOM节点的回调函数调用domManip方法。 (第253行)
  4. domManip (第514行)有点棘手,但最终确实将DOM节点传递给要插入的回调,然后调用evalScript每个脚本之后插入DOM节点,无论它们在加载的html中的顺序如何。 (第526行)
  5. 因此,jQuery确实以延迟的方式执行脚本!

    使用来源,Luke。

答案 1 :(得分:0)

“如果您直接使用浏览器访问该文件(单击它时没有警报),脚本将无法按预期工作。但是如果您使用$ .load()将其加载到另一个页面,它将起作用(点击时发出警报。 - 岸“

当您在浏览器中加载文件时,单击它时没有警报的原因是因为当浏览器读取“$('.close')...”行时,没有类“{{1}”的DOM对象“但是,因为它来自脚本标记。

您可以通过以下方式解决此问题:

close

至于延迟部分,因为当你使用$ .load()时,函数首先加载文件,然后将源放入DOM对象。将source放入DOM对象后,它将解析文件中的$(document).ready(function(){$('.close').click(function() { alert(1) });}); 标记。这就是为什么您的点击事件已成功绑定到具有类<script>

的DOM对象的原因