web-dev-qa-db-fra.com

JavaScript getElementByID () ne fonctionne pas

Pourquoi refButton obtient null dans le code JavaScript suivant?

<html>
<head>
    <title></title>
    <script type="text/javascript">
        var refButton = document.getElementById("btnButton");

        refButton.onclick = function() {
            alert('I am clicked!');
        };
    </script>
</head>
<body>
    <form id="form1">
    <div>
        <input id="btnButton" type="button" value="Click me"/>
    </div>
    </form>
</body>
</html>
26
user366312

Au moment où vous appelez votre fonction, le reste de la page n'est pas restitué et donc l'élément n'existe pas à ce stade. Essayez d'appeler votre fonction sur window.onload peut être. Quelque chose comme ça:

<html>
<head>
    <title></title>
    <script type="text/javascript">
        window.onload = function(){
           var refButton = document.getElementById("btnButton");

            refButton.onclick = function() {
                alert('I am clicked!');
            }
        };
    </script>
</head>
<body>
    <form id="form1">
    <div>
        <input id="btnButton" type="button" value="Click me"/>
    </div>
    </form>
</body>
</html>
60
jaywon

Vous devez mettre le JavaScript à la fin de la balise body.

Il ne le trouve pas car il n'est pas encore dans le DOM!

Vous pouvez également l'encapsuler dans le gestionnaire d'événements onload comme ceci:

window.onload = function() {
var refButton = document.getElementById( 'btnButton' );
refButton.onclick = function() {
   alert( 'I am clicked!' );
}
}
11
Jacob Relkin

Parce que lorsque le script s'exécute, le navigateur n'a pas encore analysé le <body>, il ne sait donc pas qu'il existe un élément avec l'ID spécifié.

Essayez plutôt ceci:

<html>
<head>
    <title></title>
    <script type="text/javascript">
        window.onload = (function () {
            var refButton = document.getElementById("btnButton");

            refButton.onclick = function() {
                alert('Dhoor shala!');
            };
        });
    </script>
    </head>
<body>
    <form id="form1">
    <div>
        <input id="btnButton" type="button" value="Click me"/>
    </div>
</form>
</body>
</html>

Notez que vous pouvez également utiliser addEventListener au lieu de window.onload = ... pour que cette fonction ne s'exécute qu'après l'analyse complète du document.

3
Bruno Reis