为什么我需要将$(document).ready添加到自执行函数中?

我只是搞乱了一些javascript而且我遇到了一些困扰我的东西。

我已经在链接到jQuery之后添加了一个脚本文件的链接到文档的标题中。

如果我放在测试文件中:

(function($){ $("#thing").mouseover(function(){alert("woo");}); })(jQuery); 

mouseover事件不会触发该function。

但是,如果我添加

 (function($){ $(document).ready(function(){ $("#thing").mouseover(function(){alert("woo");}); }); })(jQuery); 

该活动确实有效。

是不是没有$(document)。在我的自动执行函数运行时,DOM还没有完成加载,所以没有#thing尚未附加函数或是否有其他解释?

我已经将脚本文件的链接添加到文档标题中

这就是重点。

通常人们将脚本文件放在文档的页脚中以优化加载页面的过程,因此它不需要等待文档准备好基于已经加载的DOM执行某些操作(如果你在页脚中,那么你已经加载了其余的 – 除非你有一些内容加载异步)。

尝试将脚本文件放在页脚中,您将不需要$(document).ready。

简介:在您的情况下,您需要它,因为当脚本开始执行时,您还没有开始寻找DOM,并且在那段时间内找不到该元素。

这是因为文档就绪等待,直到文档完全加载才执行。

任何绑定到DOM元素的东西必须在文档完全加载时完成,否则这些事件处理程序绑定将尝试绑定到尚不存在的DOM元素。

是的,你回答了自己的问题。

$( document ).ready()仅在页面文档对象模型(DOM)准备好执行JavaScript代码时运行

它等待整个HTML除了图像。
有时你注意到你收到了一个错误“$ is not defined.”那么在这种情况下你可以使用$( document ).ready()

您可以移动$以使其工作

 $(function(){ $("#thing").mouseover(function(){alert("woo");}); }); 

演示

说明$(function(){}); 相当于$(document).ready(function(){}); 在jQuery中

文档就绪function等待页面加载,然后执行其中的任何内容。 这可以防止页面加载前的不成熟操作。 作为拇指规则,请记住这一点,

 $(document).ready(function(){ //jQuery code goes here }); 

显然这对我有用

 
@section scripts{ }

它基本上是一个立即执行的function。