我在页面上有多个document.ready函数,我想在执行所有document.ready函数时调用一个函数。我只是希望调用该函数 最后,在所有其他document.ready函数执行完毕之后。 一个例子可能是每个document.ready函数在执行时递增一个全局变量,最后一个函数需要在最后检查该变量的值。
有什么想法吗?
答案 0 :(得分:7)
这就足够了:
$(function () {
window.setTimeout(function () {
// your stuff here
}, 0);
});
这会在执行 document ready 队列中的所有其他操作后推迟执行您的函数。
答案 1 :(得分:1)
第一个想法(适用于小型应用):整理
您可以将所有内容放在一个$()。ready()调用中。它可能会破坏重构,但在大多数情况下这是正确的做法。
第二个想法:中介[模式]
创建一个中介类,它将注册函数并调用其register()而不是$()。ready()。当所有函数都被注册时你只需遍历集合并在单个中运行它们,并且只运行$()。ready()并且你的代码中的一个点就在执行之后。
我目前正在为具有中介的jquery应用程序开发一种框架。如果你感兴趣的话,我可能会把一个包括调解员的小版本粘在一起。
答案 2 :(得分:0)
为什么不在所有其他人之后调用它?
$(function(){
func1();
...
funcN();
functionThatNeedsToBeCalledAfter();
});
当然,你必须清理你的代码,只有一个地方使用文件就绪功能......但是你的代码会更具可读性,所以值得。
答案 3 :(得分:0)
小hacky但可能会工作,在jquery范围内创建一个变量,如
$.imDone = false
然后创建一个带有setTimeout的函数,在短时间后调用,以查找变量ser为true
var theLastFunctionToCall = function(){ alert('I m the last being called!') } var trigger = function(){ $.imDone?theLastFunctionToCall():window.setTimeout(trigger,10); } trigger();
我只推荐这个,当你在不同的大js文件中有不同的$(document).ready时,如果你可以重构我自己推荐一个最佳的解决方案。