2013-05-09 25 views
7

Trước khi tôi đặt câu hỏi này, tôi không bao giờ đăng về các câu hỏi như thế này nhưng tôi không hiểu cách triển khai nó trong mã của mình. i có mã như thế nàyNhiều giải pháp 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 
    } 
} 

sau đó, làm thế nào tôi có thể làm cho thực thi mã chỉ sử dụng một window.onload

+0

Chỉ cần chuyển đổi cả hai hàm trong một. Hoặc tạo một hàm gọi hai hàm còn lại. –

+0

Tại sao bạn cần hai 'onload's? –

+1

Tìm hiểu về 'addEventListener' - https://developer.mozilla.org/en-US/docs/DOM/EventTarget.addEventListener – Ian

Trả lời

22

Bạn có thể sử dụng addEventListener hoặc bất kỳ jQuery tương đương.

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

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

Đảm bảo gọi những số này trước khi cửa sổ được tải.

+0

tôi thử – Zhinto

1

window.addEventListener sẽ không làm việc trong IE để sử dụng window.attachEvent

Bạn có thể làm một cái gì đó như thế này

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

Chỉ cần tôi 2 cent, fav cách cá nhân của tôi để làm điều này là như sau:

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

Điều này khá nhiều về mọi thứ. Những gì ít (chủ yếu là các trình duyệt cực kỳ cũ tôi giả sử?) Nó không bao gồm, bạn có thể dễ dàng gỡ lỗi, nếu cần thiết. Điều này cũng đi trước và khởi chạy cuộc gọi lại nếu tài liệu đã được 'tải'.

Các vấn đề liên quan