2013-05-09 2 views
7

Прежде чем задавать этот вопрос, я никогда не пишу о таких вопросах, но я не понимаю, как его реализовать в моем коде. У меня есть код, как этотНесколько javascript window.onload solution

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

Просто преобразуйте обе функции в одну. Или сделайте функцию, которая вызывает два других. –

+0

Зачем вам два 'onload'? –

+1

Узнайте о 'addEventListener' - https://developer.mozilla.org/en-US/docs/DOM/EventTarget.addEventListener – Ian

ответ

22

Вы можете использовать addEventListener или любой эквивалент JQuery.

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

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

Обязательно называем эти перед тем загружается окно.

+0

благодаря моменту, когда я пытаюсь – Zhinto

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

Это в значительной степени охватывает практически все. Какие маленькие (в основном, чрезвычайно старые браузеры, я полагаю?), Это не распространяется, вы можете легко отлаживать, если необходимо. Это также продолжается и запускает обратный вызов, если документ уже загружен.

Смежные вопросы