2010-11-25 50 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空?]