2015-07-10 27 views
2

如何在“完成页面加载”和“完成外部脚本执行”之后调用函数?如何在“完成页面加载”和“完成外部脚本执行”之后调用函数?

我尝试了以下所有4个选项,但没有运气!

$(document).ready.. 
$(window).load... 
window.onload = ... 
$(document).ready(function()... 

做setTimeout对我有用,但不知道这是否100%有效!

setTimeout(function(){ 
//your code here 
}, 3000); 

请指教和帮助!!!

+0

我觉得你的外部脚本应包含3 ñ回调某处,将举行你的功能。当$(document).ready..' –

+0

可以执行这些外部脚本是的,但我没有任何访问权限来更新这些外部脚本进行更新。 – Sandeep

回答

3

我已与你的问题和深要去jQuery源不太感兴趣,我想出了一个疯狂的黑客:)
但关键的一点是,你应该把这段代码在开始的时候,右后你插jQuery

$.statesNum = 0; 
$.fn.ready = function (fn) { 
    $.statesNum++; 
    jQuery.ready.promise().done(fn).then(function() { 
     $.statesNum--; 
     if ($.statesNum == 0) { 
      $(document).trigger("afterReady"); 
     } 
    }); 

    return this; 
}; 

现在,只要你想执行的东西毕竟.ready功能都做,你可以这样做:

$(document).on("afterReady", function() { 
    alert("Hey, the ready functions are executed"); 
}); 
+0

感谢解决方案,但是这是什么”$ .statesNum ++ ;“是吗?你能解释一下你的逻辑吗? – Sandeep

+0

@Sandeep逻辑是jQuery承诺的后面,我正在改变jQuery就绪函数的实现,所以当一个函数传递给它时,它会增加一个计数器并添加一个回调函数,这会减少计数器,如果计数器变为0,它会触发'afterReady'事件。 – iamawebgeek

+0

很酷,谢谢... – Sandeep

1

脚本按照它们出现在HTML中的顺序加载和执行。如果你有简单的脚本,只需将你想要运行的东西放在底部即可。

但是,如果你有异步运行的复杂脚本(意味着它们并行运行),那么就不可能知道它们是否已经完成执行而没有实际查看它们的功能。例如。他们(或他们能)触发一个你可以听的事件吗?或者,也许你可以使用“承诺”模式。

+0

噢,好的...是的,我的外部脚本是“异步并行运行的......对不起,我在JS中不是先进的,什么是”做“。例如。他们(或他们能)触发一个你可以听的事件吗?或者,也许你可以使用“承诺”模式。“ – Sandeep

+0

我们真的不能告诉你具体细节,除非你告诉我们你正在运行的是什么,因为每个脚本都是不同的 – alan0xd7

相关问题