如何在document.ready的最后调用函数

时间:2010-03-18 10:57:09

标签: javascript jquery

我在页面上有多个document.ready函数,我想在执行所有document.ready函数时调用一个函数。我只是希望调用该函数 最后,在所有其他document.ready函数执行完毕之后。 一个例子可能是每个document.ready函数在执行时递增一个全局变量,最后一个函数需要在最后检查该变量的值。

有什么想法吗?

4 个答案:

答案 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时,如果你可以重构我自己推荐一个最佳的解决方案。