代码之家  ›  专栏  ›  技术社区  ›  Tom Gullen

getElementById的结果为空?

  •  0
  • Tom Gullen  · 技术社区  · 13 年前

    只是在为一个Javascript类用作一些cometishian代码的方法而挣扎,我如何为这段代码创建一个构造函数?以下代码无效:

    <!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 回复  |  直到 12 年前
        1
  •  2
  •   Tatu Ulmanen    13 年前

    这是因为在页面准备好之前,您正在运行脚本,即。 chart1 当你呼唤时,它还不存在 new ganttChart("chart1"); . 把代码包在里面 window.onload = function() { } 或者在页面底部运行它。

        2
  •  2
  •   Nick Craver    13 年前

    问题是你的脚本运行得太早了,它正在寻找一个不存在于DOM中的元素。 然而 ,或者运行脚本 onload ,或将其放置在 <body> 所以你的 id="chart1" 元素在运行时存在。

        3
  •  1
  •   Gabriele Petrioli    13 年前

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

    使用

    window.onload = function(){myChart = new ganttChart("chart1");};
    
        4
  •  1
  •   Pedro    13 年前

    请注意,这样使用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或类似的方法。

    :)

    当做, 佩德罗