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

Javascript 关于$.load()的一个奇怪问题,javascript,jquery,load,Javascript,Jquery,Load,这是我正在使用$.load()加载到DOM中的文件: <script type="text/javascript"> $('.close').click(function() { alert(1) }); </script> <div class="close"> click me </div> $('.close')。单击(函数(){alert(1)}); 点击我 比如说,在我看来,部分在加载时会自动延迟,这是$.load(

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

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

$('.close')。单击(函数(){alert(1)});
点击我
比如说,在我看来,
部分在加载时会自动延迟,这是$.load()的一个特性吗

如果是,如何实施


感觉棒极了

“如果您直接使用浏览器访问文件(单击时,无警报),脚本将无法正常工作。但是,如果您使用$.load()将其加载到另一个页面,脚本将正常工作(单击时发出警报)。–Shore”

当您在浏览器中以文件本身的形式加载文件时,单击该文件时不会出现警报的原因是,当浏览器读取行“
$('.close')…
”时,还没有类“
close
”的DOM对象,因为它位于脚本标记之后

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

$(document).ready(function(){$('.close').click(function() { alert(1) });});

至于延迟部分,这是因为当您使用$.load()时,函数首先加载文件,然后将源文件放入DOM对象中。将源代码放入DOM对象后,它将解析文件中的
标记。这就是为什么单击事件通过类
close

成功绑定到DOM对象的原因,我已经阅读了jQuery源代码,下面是我的发现:

(行号参考未压缩的jQuery 1.3.2)

  • jQuery.load
    最终获得响应,并调用jQuery
    html
    方法并将结果插入。(第3267行附近)
  • 然后调用jQuery
    append
    方法。(第488行)
  • jQuery.append
    然后使用插入DOM节点的回调函数调用
    domManip
    方法。(第253行)
  • domManip
    (第514行)有点棘手,但最终它确实会将DOM节点传递给要插入的回调,然后在插入DOM节点后,为每个脚本调用
    evalScript
    ,而不管它们在加载的html中的顺序如何。(第526行)
  • 因此,jQuery实际上是以延迟的方式执行脚本的


    使用源代码,卢克。

    延迟是什么意思?您的意思是说,调用$.load()时不会发生警报,而是只有在执行此操作并单击DIV后才会发生警报?如果您直接使用浏览器访问文件(单击时,不会发出警报),脚本将无法按预期工作。但是,如果您使用$.load()将其加载到另一个页面,它将工作(单击时发出警报)。这可能是因为直接加载它不会给DOM任何时间在尝试绑定该事件之前做好准备。但是使用load,它会给DOM加载和绑定前准备的时间。这是页面中唯一加载到DOM中的HTML吗?有没有人成功地深入jQuery源代码查看到底发生了什么?将源代码放入DOM对象后,它会解析文件中的标记。您是根据jQuery源代码说的吗?逻辑应该是这样的。通过ajax获取文件源,放入dom,然后解析脚本。