首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery + head.js:如何从head.js的ready回调内部手动触发$(document).ready()?

jQuery + head.js:如何从head.js的ready回调内部手动触发$(document).ready()?
EN

Stack Overflow用户
提问于 2012-07-08 17:27:34
回答 3查看 2K关注 0票数 4

我需要优化一个web应用程序的加载时间,其中包含大量的javascript文件包含在它的每个HTML页面。我想在一个这样的页面中尝试head.js,看看它是否可以缩短加载时间。在这些JS文件中有很多$(document).ready(callback)回调,这些回调在加载DOM时被调用,而head.js仍在下载剩余的JS文件。

有没有办法告诉jQuery不要自己触发ready事件,而是让我从head.js的ready回调中触发它?

EN

回答 3

Stack Overflow用户

发布于 2012-08-08 00:38:39

我不确定您为什么要手动触发文档就绪事件。

相反,使用jQuery内置的triggerbind功能订阅和发布您自己的事件。这是最佳实践和最佳解决方案。

票数 1
EN

Stack Overflow用户

发布于 2012-11-22 23:19:45

我做了一个小实验。类似于:

代码语言:javascript
复制
<html> 
<head>
<script src="head.js"></script>
<script src="jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
jQuery("document").ready(function() {
    console.log("ready.document");
});
</script>
...
<script type="text/javascript">
head.js("a.js", "b.js", "c.js", "test.js", function() {
        console.log("init.scripts");
        var millis = 2000;
        var date = new Date();
        var curDate = null;

        do {curDate = new Date(); } 
            while(curDate-date < millis);
        jQuery("#ddd").text(testTT);
        console.log("init.end");

});

</script>
... a lot of html content ...
<div id="ddd"></div>
...
<script type="text/javascript" >
console.log("last line");
</script>
</body>

test.js写入控制台并定义testTT。结果如下所示

代码语言:javascript
复制
last line
init.testTT
init.scripts
init.end
ready.document

因此,在这个简单的例子中(使用jQuery 1.8),首先执行已加载的*.js中的代码,然后在初始化事件上生成head.js,最后生成jQuery就绪事件。因此,等待JQuery生成ready事件应该没问题。但是,如果这仍然是一个问题,您可以执行以下操作。

代码语言:javascript
复制
head.js("a.js", "b.js", "c.js", function() { 
 jQuery("document").ready(function() {
      jQuery("body").trigger("your_event");
 });
});

而且,不要在*.js start中监听jQuery("document").ready...,而要监听触发jQuery("body").on("your_event", handler)的自定义事件。

票数 0
EN

Stack Overflow用户

发布于 2013-12-28 23:49:34

创建一个函数,在准备好的文档中注册它

$(document).ready(readyFunc);

代码语言:javascript
复制
readyFunction(){
   /// something to do;
}

如果您想手动使用它们,只需调用readyFunction();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11382048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档