2011-09-06 282 views
4

我有這個循環代碼來減少我的JavaScript中的DOM調用,並重用它們。javascript window.onload事件正確的用法

aarr = []; 

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

我已經證明,如果代碼是在DOM完成之前運行的,那麼該數組爲空。在最後一個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」刪除範圍沒有任何區別。

+1

閱讀http://stackoverflow.com/questions/978740/javascript-how-to-detect-if-document-has-loaded-ie-7-firefox-3 –

回答

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

+0

感謝理查德,不幸的是它沒有工作。 – Jamex

+1

嘿jamex.i對你的循環做了一些改變,它對我來說工作正常..看小提琴添加:) –

+0

謝謝理查德,我會試試看。 – Jamex

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. 
+0

感謝瑞克,我沒有使用jQuery,所以這對我不起作用。 – Jamex

+0

請參閱上面的編輯 – SublymeRick

+0

謝謝,我之前閱讀過這篇文章,實際上我正在使用該代碼爲firefox工作,不幸的是,IE版本都給了我錯誤。我正在逐行閱讀腳本。 – Jamex

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) 

這就是訣竅。

格爾茨,歐文Haantjes

+0

謝謝Erwin,這些jQuery代碼?我不知道/有jQuery。 – Jamex

+0

第二個代碼是非jQuery版本,行下面的getObj函數 – Codebeat

+0

「或者沒有框架(native javascript):」是你的 – Codebeat

0

負載事件觸發在文檔加載過程的結束。此時,文檔中的所有對象都在DOM中,並且所有圖像和子幀都已完成加載。

MDN - window.onload

我猜你嘗試調用onload事件之外的代碼。 See this fiddle

相關問題