2011-11-08 65 views
0

你好,我有代碼代替document.write,使緩衝區和比推緩衝區到文檔:調用對象不止一次

var lazyLoad = { 

    url: '', 
    block: '', 
    buffer: '', 

    init: function(url,block){ 
     that = this 
     that.url = url; 
     that.block = block; 

     console.info(this.block) 
     console.log(this.url) 

     window.d = document 
     window.onload = function(){ 
      that.work() 
     } 
    }, 

    work: function(){ 
     that = this 
     d.write = d.writeln = function(s){ 
            that.buffer += s 
           } 
     d.open = d.close = function(){} 
     s = d.createElement('script');  
     s.setAttribute('type','text/javascript'); 
     s.setAttribute('src',that.url); 
     d.getElementById(that.block).appendChild(s) 
     s.onload = function() { 
      window.setTimeout(function() { 

       console.warn(that.block + ' ' +that.buffer) 
       d.getElementById(that.block).innerHTML += that.buffer; 
       that.buffer = ''; 
      }, 0); 
     } 
    } 
} 

如果我初始化它一次:

lazyLoad.init(
     'http://test.com/test.js',    
     div1 
) 

但是,如果我再次用其他參數調用它:

lazyLoad.init(
     'http://test2.com/test.js',    
     div2 
) 

First init不會工作。 window.buffer將爲空。我的錯誤在哪裏?

P.S.另一個問題:我試圖用jQuery方法$(window).load()替換window.onload,但它觸發兩次。我該如何解決它?

回答

2

基本上,你只有一個緩衝:window.buffer,如果調用的init()兩次,window.buffer將被第二次調用操作,而第一個呼叫,可能無法完成。 我建議你爲每個init()使用一個單獨的緩衝區。這基本上可以避免這個問題。

關於第二個問題,

window.onload != $(window).load() 

的window.onload將只執行上次分配給它的方法,而$(窗口).load()保持鏈,可以的init()兩次,那麼鏈中有兩種方法。

+0

好的,我改變了我的緩衝區,更新後,但它仍然只能在第二個init。首先 - 沒有任何反應 – rsboarder

+0

您仍然只有一個緩衝區,現在是** lazyload.buffer **,您可以使用數組來存儲每個調用的緩衝區。 –

+0

或者更簡單的解決方法是:每次使用新的** lazyload **對象到** init()** –