Результат getElementById равен нулю? - PullRequest
0 голосов
/ 25 ноября 2010

Просто борюсь с классом 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 ]

2 голосов
/ 25 ноября 2010

Проблема в том, что ваш скрипт выполняется слишком рано, он ищет элемент, которого еще нет в DOM пока , либо запустите ваш скрипт onload, либо поместите его в конец<body>, поэтому ваш элемент id="chart1" будет найден при запуске.

2 голосов
/ 25 ноября 2010

Это потому, что вы запускаете скрипт до того, как страница готова, т.е. chart1 еще не существует, когда вы вызываете new ganttChart("chart1");.Оберните код внутри window.onload = function() { } или запустите его внизу страницы.

1 голос
/ 25 ноября 2010

Обратите внимание, что использование window.onload таким образом переопределит все ранее указанные объявления window.onload. Что-то вроде следующего было бы лучше:

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

Кроме того, пока все изображения не будут загружены полностью, загрузка не сработает, рассмотрите возможность использования jquery & $ (document) .ready или аналогичного.

:)

С уважением, Pedro

1 голос
/ 25 ноября 2010

Проблема в том, что вы запускаете свой код еще до загрузки страницы, и поэтому элемент DOM с идентификатором chart1 не существует в момент выполнения кода.

использование

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