2014-05-15 44 views
2

我只是搞了一些JavaScript,我遇到了一些让我困惑的东西。

我已经添加了一个链接到一个脚本文件到文档头,就在链接到jQuery之后。

如果我把在测试文件:

(function($){ 


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


})(jQuery); 

鼠标悬停事件不会触发功能。

不过,如果我添加

(function($){ 

$(document).ready(function(){ 

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

}); 
})(jQuery); 

事件确实工作。

难道仅仅是没有$(document).ready的DOM在我的自动执行函数运行的时候没有完成加载,所以没有什么东西需要附加函数或者是否有另一种解释?

+2

你说的是对的:) – StateLess

+2

是的,你回答了问题 –

+0

你的第一个代码似乎在为我运行。 http://stackoverflow.com/a/23676724/22858 –

回答

3

我添加了一个链接到一个脚本文件到

文档这是该点的头。

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

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

摘要:在你的情况下,你需要它,因为当脚本开始执行时,你还没有开始寻找DOM,并且在那个时候找不到元素。

1

这是因为文件准备好等待,直到该文件在执行之前完全加载。

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

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

0

你可以只移动$,使其工作

$(function(){ 


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


}); 

Demo

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

0

文档准备功能等待页面加载和 然后执行那里的任何内容。这可以防止页面加载之前不成熟的 操作。 作为一个经验法则,记住这一点,

$(document).ready(function(){ 

    //jQuery code goes here 

}); 
0

显然,这对我的作品

<div id="body"> 
<section class="featured"> 
     <div class="content-wrapper"> 
... 
     </div> 
</section> 
</div> 

@section scripts{ 
    <script type="text/javascript"> 
    (function ($) { 
     $(".featured").mouseover(function() { alert("woo"); }); 
    })(jQuery)(); 
    </script> 
} 

它基本上是立即执行功能。

相关问题