2013-05-09 96 views
7

在我问这个问题之前,我从不发布这样的问题,但我不明白如何在我的代码中实现它。我有这样多个javascript window.onload解决方案

window.onload = function() { 
var url = getQueryVariable("url"); 
document.getElementById('view').src = url; 
} 
window.onload = function() { 
    var linkDirect = document.getElementsByClassName("frame"); 
    for (var i = 0; i < linkDirect.length; i++) { 
     linkDirect[i].href = "http://namablog.blogspot.com/p/demo.html?url=" + linkDirect[i].href 
    } 
} 

然后代码,怎么能只用一个在window.onload

+0

只需将两个函数转换为一个函数即可。或者创建一个调用另外两个函数。 – 2013-05-09 14:21:25

+0

为什么你需要两个'onload's? – 2013-05-09 14:23:41

+1

了解'addEventListener' - https://developer.mozilla.org/en-US/docs/DOM/EventTarget.addEventListener – Ian 2013-05-09 14:24:15

回答

22

您可以使用addEventListener或任何jQuery的等效我使代码执行。

window.addEventListener('load', function(){ 
    alert('Function #1'); 
}); 

window.addEventListener('load', function(){ 
    alert('Function #2'); 
}); 

确保在加载窗口中的这些以前打电话。

+0

谢谢我尝试 – Zhinto 2013-05-09 14:29:37

1

window.addEventListener将不能在IE浏览所以用window.attachEvent

你可以做这样的事情

function fun1(){ 
    // do something 
} 

function fun2(){ 
    // do something 
} 


var addFunctionOnWindowLoad = function(callback){ 
     if(window.addEventListener){ 
      window.addEventListener('load',callback,false); 
     }else{ 
      window.attachEvent('onload',callback); 
     } 
} 

addFunctionOnWindowLoad(fun1); 
addFunctionOnWindowLoad(fun2); 
1

只是我的2分钱,这样做的我个人喜欢的方式如下:

function window_onload(cb) { 
    try { 
     if (typeof cb == 'function') { 
      if (document.readyState == 'complete') cb(); 
      else if (window.hasOwnProperty('jQuery')) jQuery(window).on('load', cb); 
      else if (window['addEventListener']) document.addEventListener('load', cb, false); 
      else if (window['attachEvent']) { 
       // iFrame 
       if (window['frameElement']) document.attachEvent('onreadystatechange', function(){ if (document.readyState === 'complete') window_onload(cb); }); 
       else window.attachEvent('onload', cb); 
      } 
      else { 
       var fn = window.onload; // very old browser, copy old onload 
       window.onload = function() { fn && fn(); ready(); }; 
      } 
     } 
    } 
    catch (err) { if (window['console'] && console['error']) console.error("ERROR[window_onload()]", err); } 
    return window; 
} 

这几乎涵盖了一切。什么小的(我猜想主要是非常老的浏览器?)它没有覆盖,如果需要,你可以很容易地进行调试。如果文档已被“加载”,这也继续并启动回调。