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

标签 javascript jquery

我只是在摆弄一些 JavaScript,发现了一些让我有点困惑的东西。

我已将脚本文件的链接添加到文档的标题中,就在 jQuery 的链接之后。

如果我放入测试文件:

(function($){


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


})(jQuery);

鼠标悬停事件不会触发该函数。

但是,如果我添加

(function($){

$(document).ready(function(){

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

});
})(jQuery);

该事件确实有效。

是否只是因为没有 $(document).ready ,当我的自执行函数运行时,DOM 尚未完成加载,因此还没有 #thing 来附加该函数,或者还有其他解释吗?

最佳答案

I've added a link to a script file into the header of a document

这就是重点。

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

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

总结:在你的情况下你需要它,因为当脚本开始执行时你还没有开始寻找 DOM,并且当时无法找到该元素。

关于javascript - 为什么需要将 $(document).ready 添加到自执行函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23676129/

相关文章:

javascript - 设置 onClick 导致无限循环

javascript - html <object>,从外部读取javascript检测

javascript - 了解 Backbone.js REST 调用

javascript - 谷歌地图未以全尺寸显示为容器

Javascript 更改元素的类

Javascript 功能问题 - 出现在表单条目上

javascript - jQuery 不适用于附加数据

php - jQuery 下拉依赖

javascript - 如何在 javascript 函数中单击时传递此变量?

Javascript正则表达式匹配波浪号之间的文本