getElementById的结果为null?

时间:2010-11-25 12:24:47

标签: javascript getelementbyid

正在努力将Javascript类用作某些彗星代码的方法,我如何为此代码提供构造函数?以下代码无效:

<!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为null

4 个答案:

答案 0 :(得分:2)

这是因为您在页面准备好之前运行脚本,即chart1在您致电new ganttChart("chart1");时尚不存在。将代码包装在window.onload = function() { }中或在页面底部运行。

答案 1 :(得分:2)

问题是你的脚本运行得太早了,它正在寻找一个在尚未中不存在的元素,要么运行你的脚本onload,要么把它放在<body>的结尾,以便您的id="chart1"元素在运行时可以找到。

答案 2 :(得分:1)

问题是你在页面加载之前运行你的代码,因此在执行代码时,id chart1的DOM元素不存在。

使用

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

答案 3 :(得分:1)

请注意,像这样使用window.onload将覆盖之前声明的所有window.onload声明。以下几行中的内容会更好:

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

此外,直到alload图像完全加载onload都不会触发,考虑使用jquery&amp; $(文件).ready或类似。

:)

此致 佩德罗