2013-05-13 42 views
0

林:在window.onload網絡之前執行使用此代碼來觸發頁面加載後右功能加載

function loadpapi(){ 
    alert("Hello World!"); 
} 

function pctaddLoadEvent(func) { 
    var oldonload = document.onload; 
    if (typeof document.onload != 'function') { 
    document.onload = func; 
    } else { 
    document.onload = function() { 
     if (oldonload) { 
     oldonload(); 
     } 
     func(); 
    } 
    } 
} 

pctaddLoadEvent(loadpapi()); 

但頁面加載之前開始,你可以在這裏嘗試一下:http://jsfiddle.net/KuTxh/

回答

2
pctaddLoadEvent(loadpapi()); 

此代碼調用loadpapi(就像任何其他函數調用),並傳遞結果pctaddLoadEvent

想要傳遞函數而不調用它。

+0

你確定?據我所看到的IM傳遞函數pctaddLoadEvent – DomingoSL 2013-05-13 15:02:54

+0

@DomingoSL的'()'函數名字的意思後,「這裏調用這個函數並返回結果「 – snumpy 2013-05-13 15:22:51

+0

@DomingoSL不,你正在*調用* loadapi *立即*然後將loadapi的返回值傳遞給'pctaddLoadEvent'。你將一個函數的結果傳遞給'pctaddLoadEvent';相反,你想傳遞函數對象本身。 – apsillers 2013-05-13 15:23:02

2

我將事件從document.onload更改爲window.onload:查看討論here

document.onload vs window.onload是一個複雜的主題。很有可能document.onload事件並非由您的瀏覽器在所有上觸發。 (或者,正如一個人處理窗口,另一個人處理DOM樹,當你的javascript函數採取行動時,可能已經觸發了document.onload事件 - 更多測試可以證實這一點。)

此外,函數作爲參數不帶(),因爲你想傳遞函數本身,而不是它的返回值。

function loadpapi(){ 
    alert("Hello World!"); 
} 


function pctaddLoadEvent(func) { 
    var oldonload = window.onload; 
    if (typeof window.onload != 'function') { 
    window.onload = func; 
    } else { 
    window.onload = function() { 
     if (oldonload) { 
     oldonload(); 
     } 
     func(); 
    } 
    } 
} 

pctaddLoadEvent(loadpapi); 

檢查演示小提琴:http://jsfiddle.net/st4kQ/

相關問題