在页面内执行javascript函数作为最后一个

时间:2012-08-28 08:48:08

标签: javascript jquery

我需要确保页面中的某个脚本是最后执行的。 我想过使用JQuery

$(document).ready( ... )

但是如果有更多这种类型的函数,它实际上是最后执行的吗?

7 个答案:

答案 0 :(得分:2)

理论上你可以这样做:

// Form array of functions which sould be called with according order
$.readyArray = [function () { ... }, function () { ... }, function () { ... }, ...];

// just execute them in this order when onready event
$(document).ready(function() {
  for (var i = 0; i < $.readyArray.length; i++) {
    //apply, calls function in current context and pass arguments object
    $.readyArray[i].apply(this,[arguments]);
  }
});

答案 1 :(得分:1)

这取决于您注册的顺序。

E.g:

$(document).ready( function() { alert("first"); });
$(document).ready( function() { alert("second"); });
$(document).ready( function() { alert("third"); });​

会提醒“先”,然后是“第二”,然后是“第三”

因此,使用<script>在页面底部添加$(document).ready( yourfunction );即可。

答案 2 :(得分:1)

$(document).ready( ... )

最后没有执行。执行的最后一个函数(因此,在文档就绪后)是<body onload>中的一个。

示例:<body onload="myJSfunction();">

这里,javascript myJSfunction在$(document).ready(...)之后的最后执行。

答案 3 :(得分:1)

有许多方法可以延迟脚本的执行。

无法以编程方式检测所有这些内容。

对于可靠的解决方案,您必须反转引导您关注的每个页面的代码,找出它正在做什么(以及何时)并专门为该页面编写延迟脚本。 (对于“可靠”的值等于“直到他们更改页面”)。

答案 4 :(得分:1)

如果重构(如 Quentin 建议的那样)不是一种选择(例如,您正在更新框架或产品的一部分),您可以使用四种方法,这应该会给您一个很好的机会实现您的目标需要。使用 jQuery 查看以下片段:

(1) 等到'文档'准备好

文档是指可见的 DOM。脚本将在所有应呈现的内容真正呈现时触发。

$(document).ready(function() {
  console.log('Document is ready.');
});

(2) 等到顶级 JS (Root) 'window' 对象准备好

完整的根对象可以(将)在 DOM 准备好后的一段时间准备好。

$(window).ready(function() {
  console.log('Window is ready.');
});

(3) 使用 .bind 等待 'window' 完全加载

这会在 'window' 准备就绪后立即触发,因此您的脚本可以对上述 $(window).ready() 期间呈现的对象(元素)进行操作。

$(window).bind("load", function() {
  console.log('Window bind is ready.');
});

(4) 等待 Ajax 调用完成

这是你所能做的——当'window'准备好、加载、所有代码运行并且所有Ajax操作完成时,脚本将触发。不幸的是,由于一个 Ajax 可以调用另一个 Ajax,因此在页面加载期间它可能会触发多次。

$(window).ajaxComplete(function() {
  console.log('Window bind is ready, Ajax finished.');
}

答案 5 :(得分:0)

在简单的Javascript解决方案中,您可以在脚本标记内的HTML文档末尾调用javascript函数。当你不使用jQuery时,这很有效。

如果是jQuery,你可以使用load方法。当它和所有子元素完全加载时,load事件被发送到一个元素。

有关详细信息,请查看

http://api.jquery.com/load-event/

答案 6 :(得分:0)

尝试一下,

https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/directReports