2012-04-25 92 views
3

我有這個例子文件:JavaScript的onload和DOM

<html> 
    <body> 
     <script type="text/javascript"> 
      document.body.onload = myFunc(); 

      function myFunc() { 
       element = document.getElementById('myDiv'); 
       element.innerHTML = 'Hello!'; 
      } 
     </script> 
     <div id="myDiv"></div> 
    </body> 
</html> 

爲什麼 '元素' 爲空,如果myFuncdocument.body.onload回調?

相反,如果腳本是div之後插入,它的工作原理:

<html> 
    <body> 
     <div id="myDiv"></div> 
     <script type="text/javascript"> 
      document.body.onload = myFunc(); 

      function myFunc() { 
       element = document.getElementById('myDiv'); 
       element.innerHTML = 'Hello!'; 
      } 
     </script> 
    </body> 
</html> 

我的問題是:如果我使用的處理函數中的onload事件,我應該有整個DOM,或不?爲什麼我不應該?

+0

儘管ThiefMaster指出了代碼中的錯誤,這可能對您有所幫助 - 在DOMContentLoaded之前訪問'document.body'可能會給您帶來錯誤。所以,請注意這一點:)即使jquery檢查是否存在「document」對象,以確認dom已準備好供腳本訪問。 'var body = document || document.body || document.getElementsByTagName('body')[0]'可能會有幫助,如果你將來做好事的話) – Tamil 2012-04-26 17:02:19

回答

2

的問題是,你會立即調用該函數(和轉讓其返回值)。

分配的功能,而不是和它的工作:

document.body.onload = myFunc; 

您還應該使用var element在你的功能,避免產生全局變量。


或者,如果你想迷惑人:

document.body.onload = myFunc(); 
function myFunc() { 
    return function() { 
     var element = document.getElementById('myDiv'); 
     element.innerHTML = 'Hello!'; 
    }; 
} 

但我們做到這一點。這裏沒有意義。 ;)

+0

你睜開了眼睛! LOL 謝謝! – 2012-04-25 21:54:14

0

使用這個代替

document.body.onload = myFunc; 

或者

document.body.onload = function() { 
    myFunc(); 
};