2013-05-13 30 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/

相关问题