2013-05-09 10 views
7

Prima di porre questa domanda, non inserisco mai post su domande come questa, ma non capisco come implementarlo nel mio codice. Ho codice come questoSoluzione javascript window.onload multiplo

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 
    } 
} 

allora, come posso fare l'esecuzione di codice utilizzando un solo window.onload

+0

Basta trasformare entrambe le funzioni in una. Oppure fai una funzione che chiama gli altri due. –

+0

Perché hai bisogno di due 'onload's? –

+1

Informazioni su 'addEventListener' - https://developer.mozilla.org/en-US/docs/DOM/EventTarget.addEventListener – Ian

risposta

22

È possibile utilizzare addEventListener o qualsiasi equivalente jQuery.

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

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

assicurarsi di chiamare questi prima la finestra viene caricato.

+0

momento in cui provo – Zhinto

1

window.addEventListener non funziona in IE in modo da utilizzare window.attachEvent

Si può fare qualcosa di simile

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

Solo i miei 2 centesimi, Il mio modo fav personali di fare questo è la seguente:

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; 
} 

Questo copre praticamente tutto. Che poco (soprattutto i browser estremamente vecchi, suppongo?) Non copre, si potrebbe facilmente eseguire il debug, se necessario. Anche questo va avanti e lancia il callback se il documento è già 'caricato'.

Problemi correlati