2016-07-14 42 views
-1

我想执行一段只在文档已被加载(不是在加载后执行RIGHT的情况下才运行)的代码段。 寻找不是JQuery的东西。只在窗口加载时执行动作

问题背后的前提是:我有一个在页面完全加载之前运行的函数。但是,该函数会调用另一个调度事件的函数。如果窗口已经加载,我只想要分派事件。如果没有,也许只是将它存储在一个数组中,并在页面加载后发送它

+3

https://stackoverflow.com/questions/799981/document-ready-equivalent-without-jquery – Jack

+0

是:

对于重用的解决方案,你可以在接受回调函数封装这一行为你试图检测一个事件,或者只是有一些代码来放入一个'if'语句? – 4castle

+0

基本上放在'if'语句中。我尝试过DOMContentLoaded和onload,但它们不适用于我正在做的事情。我想要检查dom是否已加载,不要在加载后立即运行某些东西......如果这很有意义 –

回答

1

您的问题的细微差别似乎是,您没有困难捕获onload事件,而只是知道它是否发生了。

我会做jQuery的工作,并在onload事件中设置一个标志为true,然后在if语句中可以引用该标志。

var whenLoaded = (function() { 
    var isLoaded = false, 
     callbacks = []; 
    window.onload = function() { 
     isLoaded = true; 
     for (var i = 0; i < callbacks.length; i++) 
      callbacks[i](); 
    }; 
    return function whenLoaded(callback) { 
     if (isLoaded) { 
      callback(); 
     } else { 
      callbacks.push(callback); 
     } 
    }; 
})(); 

... 

whenLoaded(function() { 
    // eat a cookie 
}); 
+0

问题背后的前提: 我有一个在页面完全加载之前运行的函数。但是,该函数会调用另一个调度事件的函数。如果窗口已经加载,我只想要分派事件。如果没有,也许只是将其存储在一个数组中,并在页面加载后调度它。 –

+0

@HassaanHafeez我已经更新了我的答案,以使它更加多用于IIFE,但基本上只需要将该语句放在'onload'块中或者是,否则将其放入稍后调用的数组中。 – 4castle