延迟一个jquery脚本,直到一切已经加载

我有一个jquery脚本,我只需要运行一次页面上的其他一切,包括其他一些JavaScript(我无法控制)已经完成了他们的事情。

我虽然也许有一个替代$(document).ready,但我一直无法find它。

您可以在页面中多次使用$(document).ready() 。 代码按照出现的顺序运行。

你可以在你的代码中使用$(window).load()事件,因为这种情况发生在页面完全加载之后,并且各个$(document).ready()处理程序中的所有代码都已经完成运行。

 $(window).load(function(){ //your code here }); 

多个$(document).ready()将按照页面上的顺序触发。 最后一个$(document).ready()将在页面上最后触发。 在最后的$(document).ready() ,你可以触发一个新的自定义事件来触发所有其他的事件。

将代码包装在新的自定义事件的事件处理程序中。

 <html> <head> <script> $(document).on("my-event-afterLastDocumentReady", function () { // Fires LAST }); $(document).ready(function() { // Fires FIRST }); $(document).ready(function() { // Fires SECOND }); $(document).ready(function() { // Fires THIRD }); </script> <body> ... other code, scripts, etc.... </body> </html> <script> $(document).ready(function() { // Fires FOURTH // This event will fire after all the other $(document).ready() functions have completed. // Usefull when your script is at the top of the page, but you need it run last $(document).trigger("my-event-afterLastDocumentReady"); }); </script> 

这个代码块解决了我的问题,

 <script type="text/javascript"> $(window).bind("load", function () { // Code here }); </script> 

从这里 :

 // Add jQuery var GM_JQ = document.createElement('script'); GM_JQ.src = 'src/jquery-latest.html'; GM_JQ.type = 'text/javascript'; document.getElementsByTagName('head')[0].appendChild(GM_JQ); // Check if jQuery's loaded function GM_wait() { if(typeof unsafeWindow.jQuery == 'undefined') { window.setTimeout(GM_wait,100); } else { $ = unsafeWindow.jQuery; letsJQuery(); } } GM_wait(); // All your GM code must be inside this function function letsJQuery() { // Do your jQuery stuff in here } 

这将等到jQuery被加载使用它,但你可以使用相同的概念,在其他脚本中设置variables(或者检查它们是否不是你的脚本),等待它们被加载使用它们。

例如,在我的网站上,我使用这个进行asynchronousJS加载并等待完成,然后再用jQuery做任何事情:

 <script type="text/javascript" language="JavaScript"> function js(url){ s = document.createElement("script"); s.type = "text/javascript"; s.src = url; document.getElementsByTagName("head")[0].appendChild(s); } js("/js/jquery-ui.js"); js("/js/jrails.js"); js("/js/jquery.jgrowl-min.js"); js("/js/jquery.scrollTo-min.js"); js("/js/jquery.corner-min.js"); js("/js/jquery.cookie-min.js"); js("/js/application-min.js"); function JS_wait() { if (typeof $.cookie == 'undefined' || // set in jquery.cookie-min.js typeof getLastViewedAnchor == 'undefined' || // set in application-min.js typeof getLastViewedArchive == 'undefined' || // set in application-min.js typeof getAntiSpamValue == 'undefined') // set in application-min.js { window.setTimeout(JS_wait, 100); } else { JS_ready(); } } function JS_ready() { // snipped }; $(document).ready(JS_wait); </script> 

事实certificate,由于JavaScript框架的独特混合,我需要使用由其他框架之一提供的事件侦听器来启动脚本。

你有没有试过使用$().ready加载所有的初始化函数,运行你想要的jQuery函数?

也许你可以在你想运行的$().ready函数上使用setTimeout() ,调用你想要加载的function。

或者,使用setInterval()并进行间隔检查以查看是否所有其他加载函数都已完成(将状态存储在布尔variables中)。 条件满足时,可以取消间隔并运行加载function。