2010-11-25 51 views
0

只是在用Javascript作爲一些方法來處理一些cometishian代碼時,我該如何爲這段代碼構造一個構造函數呢?下面的代碼是無效的:getElementById的結果是否爲空?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
<html>  
    <head>  
     <link rel="Stylesheet" href="gStyle.css" />    
     <script type="text/javascript" language="javascript">  
      // Gantt chart object 
      function ganttChart(gContainerID) {  
       this.isDebugMode = true; 
       this.gContainer = document.getElementById(gContainerID);  
       if (this.isDebugMode) { 
        this.gContainer.innerHTML += "<div id=\"gDebug\">5,5 | 5.1</div>"; 
       }  
      }     
      var myChart = new ganttChart("chart1");     
     </script>    
    </head>  
</html>  
<body>  
    <div id="chart1" class="gContainer"></div>  
</body>  
</html> 

this.gContainer是空

+0

可能重複(http://stackoverflow.com/questions/8739605/getelementbyid-returns-null) – 2012-04-07 22:54:41

回答

2

那是因爲你正在運行腳本之前的頁面已準備就緒,即chart1當你調用new ganttChart("chart1");還不存在。將代碼包裝在window.onload = function() { }內部或者在頁面底部運行。

+0

謝謝你,思想它會是這樣的! – 2010-11-25 12:31:00

2

的問題是,你的腳本太早運行,它是尋找一種不會在DOM 存在,無論是運行腳本onload,或將其放置在<body>所以你id="chart1"結束元素元素在運行時會被找到。

1

問題是,您在頁面加載之前運行代碼,因此在代碼執行時,id chart1的DOM元素不存在。

使用

window.onload = function(){myChart = new ganttChart("chart1");}; 
1

注意,使用的window.onload一樣,將覆蓋所有前面提到的window.onload聲明。大意如下的東西會更好:

<script type="text/javascript"> 
var prevOnload = window.onload || function() {}; 
window.onload = function() { 
prevOnload(); 
// do your stuff here 
}; 
</script> 

而且,直到人的圖像完全加載onload事件不會觸發,可以考慮使用jQuery & $(文件)。就緒或類似的。

:)

問候, 佩德羅

的[返回的getElementById空?]