2012-01-18 87 views
4

我有很多在$(document).ready()上生成的HTML。我有一个简单的窗口系统。但不仅在$(document).ready()上生成 - 还有一些HTML元素(不同的JS文件将东西放入$(document).ready())。我想在调用$(document).ready()之后生成我的窗口系统。那么在$(document).ready()中注册的所有代码完成后,如何处理要调用的函数呢?

+2

那是一个很大的$(文件)。准备()! ;-) – janhartmann 2012-01-18 13:11:25

+0

所以,你想要一个.ready()为你的document.ready()?这不是jQuery的工作原理 - 与PHP上的WordPress不同,由于JavaScript基于事件的模型,jQuery无法“知道”您已经完成了所有已放入ready()函数的代码。所以,在document.ready()之后没有调用事件。您需要创建并等待事件自行完成,或者使用window.load()。 – Cole 2012-01-18 13:15:28

回答

6

还有另外一个事件在稍后被解雇。它是$(window).load();在加载所有资源后触发。

但是,也许你想这样的:

function loadWindowSystem(){ 
    // load window system here 
} 

$(document).ready(function(){ 
    // do some html stuff here 

    loadWindowSystem(); 
}) 

这样你就可以在单独的功能代码。

+0

注意:window.load在加载所有资源时触发,不仅仅是图像 – 2012-01-18 13:15:59

+0

这意味着我需要在每个使用$(document).ready(“”)生成的文档中调用'loadWindowSystem()'来生成HTML ...而且.js的加载将如此重要... – myWallJSON 2012-01-18 13:17:13

+0

感谢Didier,我在我的答案中改变了它。 – timing 2012-01-18 13:24:35

0

没有什么该功能后,所以如果你有一些Ajax装载机,只认为你能做的就是等待所有这些,然后开始渲染

修改,但我不知道为什么你不只是structuralize代码消除这一点。

0

$(document).ready()在DOM完成加载后立即调用。 pageLoad()在0计时器上被调用,但要小心它在每次部分回发后运行。

编辑:添加了旁注 - 只有在使用ASP.NET时才会计数,所提及的pageLoad功能与jQuery是分开的。查看更多信息Here

2

如果你想要的东西解雇所有$(document).ready()电话之后,你可以在页面中把这个任意位置:

$(document).ready(function() { 
    setTimeout(function() { 
     // call your code here that you want to run after all $(document).ready() calls have run 
    }, 1); 
}); 

这将得到与其他所有的document.ready电话叫一起,但它会设置一个短暂的超时,在所有其他document.ready调用完成后执行。

3

我一般不主张使用setTimeout,但你可以建立在@ jfriend00的回答之上创造一个更加抽象的方法:

$(document).ready(function() { 
    setTimeout(function() { 
     $(document).trigger('afterready'); 
    }, 1); 
}); 

$(document).bind('afterready', function() { 
    // call your code here that you want to run after all $(document).ready() calls have run 
}); 
6
$(window).load(function(){ 
    //some code after ready 
    }); 
+1

这里有很多谈话围绕着答案。这是所问问题的确切答案。 – JackArbiter 2015-03-04 02:44:37

相关问题