2

我们最近遇到了一个错误,其中 jquery document.ready 似乎在 DOM 加载之前被触发。事实证明,在调用的第一项之后有一些错误的代码

$.ready(function(){});

似乎该语句正在触发 document.ready 事件。

这是代码示例:

<script>
    $(function(){
        alert("loaded");
    });
</script>
<ul>
    <li>  hello </li>
    <script>
        $.ready(function(){
    });
    </script>
    <li>  worldddd</li>
</ul>

这是一个jsfiddle,您可以在其中看到执行警报时dom尚未完全加载。

http://jsfiddle.net/Kq78e/

我的问题是为什么 $.ready() 会触发 dom 就绪事件?这是一个 jquery“特性”,它允许你强制 dom.ready 事件触发?

4

2 回答 2

2

它触发事件,因为它是事件的处理程序。http://github.com/jquery/jquery/blob/1.9-stable/src/core.js#L397

它是一个内部方法,不应该在 jQuery 核心之外使用,除非你知道它做了什么,为什么这样做,并且有充分的理由使用它。

它只是告诉 jQuery DOM 准备好了。这是应用于DOMContentLoaded事件的处理程序。正如您所注意到的,您自己调用它可能会导致事件发生得太快。您的代码中的用法很可能是这样的:

$(document).ready(function(){

});
于 2013-06-04T15:37:18.270 回答
1

.ready()目标对象准备好后立即运行。(记住,$是一个对象,可以选择。)

当您指定 时$.ready(),您是在告诉代码在加载 jQuery ( $) 后立即运行(而不是在$(document).ready()加载文档时运行),这就是它在加载 DOM 之前运行的原因。

$.ready()相当于$(document).on('ready', $, handler)

请参阅.ready()文档

于 2013-06-04T15:37:25.827 回答