0

只是在使用 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 为空

4

4 回答 4

2

那是因为您在页面准备好之前运行脚本,即chart1当您调用new ganttChart("chart1");. 将代码包装在内部window.onload = function() { }或在页面底部运行。

于 2010-11-25T12:29:26.983 回答
2

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

于 2010-11-25T12:30:14.370 回答
1

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

采用

window.onload = function(){myChart = new ganttChart("chart1");};
于 2010-11-25T12:30:22.990 回答
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 & $(document).ready 或类似的。

:)

问候,佩德罗

于 2010-11-25T12:39:23.393 回答