6

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

$(document).ready( ... )

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

4

7 回答 7

2

这取决于您注册它们的顺序。

例如:

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

会提醒“第一”然后是“第二”然后是“第三”

因此<script>,在页面底部添加 a$(document).ready( yourfunction );就足够了。

于 2012-08-28T08:51:25.110 回答
2

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

没有办法以编程方式检测所有这些。

为了获得可靠的解决方案,您必须对您关心的每个页面的代码进行反向引擎,弄清楚它在做什么(以及何时)并专门为该页面编写延迟脚本。(对于“可靠”的值等于“直到他们更改页面”)。

于 2012-08-28T08:51:40.520 回答
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]);
  }
});
于 2012-08-28T08:53:44.263 回答
1
$(document).ready( ... )

不是最后执行的。最后执行的函数(因此,在 document ready 之后)是 from 的函数<body onload>

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

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

于 2012-08-28T08:51:30.257 回答
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) 等到 'window' 使用 .bind 完全加载

这会在“窗口”准备好后立即触发,因此您的脚本可以作用于$(window).ready()上面渲染的对象(元素)。

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

(4)等到Ajax调用完成

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

$(window).ajaxComplete(function() {
  console.log('Window bind is ready, Ajax finished.');
}
于 2021-03-25T14:40:19.727 回答
0

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

在 jQuery 的情况下,您可以使用 load 方法。当元素和所有子元素都已完全加载时,将加载事件发送到元素。

有关更多信息,请查看

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

于 2012-08-28T08:54:31.417 回答
0

试试这个,

$(window).bind("load", function() {
    //code here
});
于 2020-01-09T12:39:22.857 回答