javascript window.onload事件正确用法

时间:2011-09-06 22:35:17

标签: javascript javascript-events onload

我有这个循环代码来减少我的javascript中的DOM调用,并重用它们。

aarr = [];

for (var z=1; z<=10; z++) {
    c = z-1;
    aarr[c] = document.getElementById("a"+z); 
}

我已经证明,如果代码在DOM完成之前运行,那么数组为null。在最后一个html代码之后移动脚本将起作用。

所以现在我想将此代码放在window.onload事件中,以便不必将脚本代码移动到页面底部。但它显然不起作用,因为似乎在DOM完成之前执行了数组循环。

window.onload=function(){

    var aarr = [];
    for (var z=1; z<=10; z++) {
        c = z-1;
        aarr[c] = document.getElementById("a"+z);
    }
}

另外,我试图删除“var”以删除范围而不会产生任何影响。

4 个答案:

答案 0 :(得分:2)

您也可以在不使用框架的情况下尝试此方法:

window.onload = (function(){
    return function(){
        var aarr = [];
        for (var z=1; z<=10; z++) {
            aarr.push(document.getElementById("a"+z));
               alert(aarr[z-1].id);
        }
     };
})();

JSFiddle

答案 1 :(得分:0)

如果您可以使用jquery,那么您可以使用文档就绪监听器:

$(document).ready(function() {

  var aarr = [];
  for (var z=1; z<=10; z++) {
    c = z-1;
    aarr[c] = document.getElementById("a"+z);

 }

});

http://www.jquery.com

根据上面的评论,你试过了吗?

if (document.readyState === "complete") { init(); } // call whatever function u want.

答案 2 :(得分:0)

最好在没有预先扫描dom的情况下使用函数来创建缓存,当您使用具有缓存构造的简单函数时,不需要预扫描。使用jQuery,你可以创建一个这样的函数(下面的本机javascript方法):

window.__jcache = {};

  window.$jc = function(u) // jQuery cache
  {
   if( u == undefined )
    { return window.jQuery; }
   if( typeof u == 'object' || typeof u == 'function' )
    { return window.jQuery(u); }
   if( window.__jcache[u] == undefined )
    { window.__jcache[u] = window.jQuery(u); }

   return window.__jcache[u]; 
  };

或者没有框架(原生javascript):

window.__domcache = {};

  window.getObj = function(u) // jQuery cache
  {
   if( u == undefined )
    { return null; }
   if( typeof u == 'object' || typeof u == 'function' )
    { return u; }
   if( window.__domcache[u] == undefined )
    { window.__domcache[u] = document.getElementById(u); }

   return window.__domcache[u]; 
  };

所以你可以这样做:

var o = $jc('a1'); // for jquery version

var o = getObj('a1'); // The native javascript method (jamex)

这就是诀窍。

Greetz,Erwin Haantjes

答案 3 :(得分:0)

  

加载事件在文档加载过程结束时触发。此时,文档中的所有对象都在DOM中,并且所有图像和子帧都已完成加载。

MDN - window.onload

我猜你尝试在onload之外调用代码。 See this fiddle