2010-11-25 28 views
0

Difficulté juste avec une classe Javascript étant utilisée comme méthode pour un code cométish, comment ai-je un constructeur pour ce code? Le code suivant est invalide:Le résultat de getElementById est null?

<!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 est nul

+0

double possible de [getElementById renvoie null?] (Http://stackoverflow.com/questions/8739605/getelementbyid-returns-null) –

Répondre

2

C'est parce que vous exécutez le script avant que la page est prête, à savoir chart1 n'existe pas encore lorsque vous appelez new ganttChart("chart1");. Enveloppez le code à l'intérieur window.onload = function() { } ou exécutez-le au bas de la page.

+0

Merci, pensée ce serait quelque chose comme ça! –

2

Le problème est que votre script est en cours d'exécution trop tôt, il cherche un élément qui n'existe pas dans les DOM encore, soit exécuter votre script onload, ou placez-le à la fin de la <body> afin que votre id="chart1" élément est là pour être trouvé quand il s'exécute.

1

Le problème est que vous exécutez votre code avant que la page ait encore été chargée, et donc l'élément DOM avec l'id chart1 n'existe pas au moment où le code est exécuté.

utilisation

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

Notez que l'utilisation window.onload comme ça remplace toutes les déclarations de window.onload énoncées précédemment. Quelque chose le long des lignes suivantes serait mieux:

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

également, jusqu'à ce images sont al onload entièrement chargées ne se déclenche pas, pensez à utiliser jquery & $ (document) .ready ou similaires.

:)

Cordialement, Pedro