我需要确保页面中的某个脚本是最后执行的。 我想过使用JQuery
$(document).ready( ... )
但是如果有更多这种类型的函数,它实际上是最后执行的吗?
答案 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事件被发送到一个元素。
有关详细信息,请查看
答案 6 :(得分:0)
尝试一下,
https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/directReports