我可以在单个html页面中多次使用jquery的$(document).ready()吗?

时间:2011-08-18 14:01:02

标签: jquery html document-ready

我有一个名为“text.html”的一个 html页面

<html>
    <body>
        <script type="text/javascript" src="jquery.js"></script>
        <script type="text/javascript" src="js/Photos.js"></script>
        <script type="text/javascript" src="js/Animations.js"></script>
    </body>
</html>

Photos.js和Animations.js都以“$(document).ready()”开头,就像这样

//Javascript File Photos.js
$(document).ready(function() {
    //My code here ....
});

//Javascript File Animations.js
$(document).ready(function() {
    //My code here ....
});

如果我使用多个 $(文档).ready(function(){在 html页面中

是否重要?

先谢谢

5 个答案:

答案 0 :(得分:6)

您可以根据需要使用多个,但为了便于阅读,最好将其保留为一个。

另请考虑使用简写$(function() { ... });

答案 1 :(得分:2)

不,没关系。

但是,一切都可以包含在同一个中。


修改

有关您的评论的详细说明,请参阅我的回答in this thread

Will linking javascript files in the body rather than in the header cause a problem?

答案 2 :(得分:2)

  

如果我使用多个$(document).ready(function(){in a   单个html页面??

是的,这很重要。

jQuery函数被同时调用多次,从而浪费时间和内存。

对于你编写的代码和插件,你应该总是尝试只使用一个$(document).ready()$(window).load(),但你会发现许多插件都是从你指出的那个调用开始的。

修改

如果你真的无法抗拒使用$(document).ready()不止一次,至少在你第一次使用时尝试将文档的引用存储在一个变量中,所以你没有每次检查文档对象,如下所示:

// store the jQuery document object to a variable
var $document = $(document);

$document.ready( //... );

至少你会保存一些函数调用。

答案 3 :(得分:1)

没有丝毫。他们都只会在同一事件上触发。没关系。 :)

答案 4 :(得分:1)

  

如果我在单个html页面中使用多个$(document).ready(function(){是否重要?

不,没关系,在某些(读:很多)案例中,这是正确的方法。但是,像往常一样,我想提供一些(有用的)指针:

正如您在评论中提到的,技术上在</body>之前添加文件调用意味着,您基本上不需要使用$(document).ready()。我个人尽量避免尽可能多地避免,因为jQuery并不像JS那样严格(意思是:大多数脚本都没有$(document).ready())。

[编辑:这部分答案不准确,请参阅下面的评论] 此外,在页脚中添加jquery,甚至在{{1}中添加jquery是不明智的}。从技术上讲,它不是不正确的,但如果您正在处理类似cms的软件或某些模板功能,那么您希望所有页面都包含jQuery。或者你可以称之为我的老学校知识。

由于你想在页脚中调用Photos.js和Animations.js,我认为,它们不是正确的插件。如果你想让你的代码更紧凑,那么将它们组合成正确的插件。然后你可以在标题中添加插件并拥有单个页脚文件,将插件分配给元素(阅读:激活它们。)Here is a quick tutorial如何创建自己的插件。

此外,如果您有多个JS文件,则必须将其包含在页面中。然后,您可以使用<body>使代码更整洁。您必须像往常一样首先添加jQuery,但调用其他文件可以在一个$.getScript()标记中完成。看起来更整洁,它似乎也快一点(至少在你自己的头脑中。)我给你一个小例子:

<script>