Pourquoi puis-je obtenir une erreur ou Uncaught TypeError: Impossible de définir la propriété 'innerHTML' de null? Je pensais avoir compris innerHTML et l'avoir fonctionné auparavant.
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Untitled Document</title> <script type ="text/javascript"> what(); function what(){ document.getElementById('hello').innerHTML = 'hi'; }; </script> </head> <body> <div id="hello"></div> </body> </html>
Vous devez placer le bonjour div avant le script, afin qu'il existe lorsque le script est chargé.
Vous devez indiquer à javascript pour effectuer l'action "onload" … Essayez avec ceci:
<script type ="text/javascript"> window.onload = function what(){ document.getElementById('hello').innerHTML = 'hi'; }; </script>
Mettez simplement votre JS dans window.onload
window.onload = function() { what(); function what() { document.getElementById('hello').innerHTML = 'hi'; }; }
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Example</title> </head> <body> <div id="hello"></div> <script type ="text/javascript"> what(); function what(){ document.getElementById('hello').innerHTML = '<p>hi</p>'; }; </script> </body> </html>
Javascript semble bon. Essayez de l'exécuter après le chargement du div. Essayez d'exécuter uniquement lorsque le document est prêt. $ (Document) .ready in jquery.
Voici mon extrait, essayez-le. J'espère que cela vous sera utile.
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Untitled Document</title> </head> <body> <div id="hello"></div> <script type ="text/javascript"> what(); function what(){ document.getElementById('hello').innerHTML = 'hi'; }; </script> </body> </html>
La partie JavaScript doit être exécutée une fois que la page est chargée. Il est conseillé de placer un script JavaScript à la fin de l'étiquette du corps
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Example</title> </head> <body> <div id="hello"></div> <script type ="text/javascript"> what(); function what(){ document.getElementById('hello').innerHTML = 'hi'; }; </script> </body> </html>
Je vois que tous les techniciens ont fourni la solution sur la façon de se débarrasser du problème, mais personne n'a répondu à la raison ou à la cause principale de pourquoi il se passe en premier lieu.
Pourquoi puis-je obtenir une erreur ou Uncaught TypeError: Impossible de définir la propriété 'innerHTML' de null?
Tout code javascript écrit à l'intérieur des étiquettes de script
(présent dans la partie head
de votre fichier HTML) est exécuté par le moteur de rendu du navigateur avant même que votre DOM entier ne soit chargé. Le navigateur charge l'intégralité du DOM HTML de haut en bas. Les scripts présents dans la balise de head
tentent d'accéder à un élément ayant l'id hello
même avant qu'il ait effectivement été rendu dans le DOM. Donc, évidemment, le script java a échoué à voir l'élément et donc vous finissez par voir l'erreur de référence nulle.
Comment pouvez-vous fonctionner comme avant?
Vous souhaitez afficher le message "salut" sur la page dès l'arrivée de l'utilisateur sur votre page pour la première fois. Vous devez donc brancher votre code à un moment où vous êtes complètement sûr du fait que DOM est entièrement chargé et que l'élément d'identification hello
est accessible / disponible. Il est réalisable de deux façons:
hello
soit déjà chargé. Vous pouvez le faire en déplaçant simplement la balise de script après tous les éléments DOM, c'est-à-dire en bas où l'étiquette du body
se termine. Puisque le rendu se déroule de haut en bas afin que vos scripts soient exécutés à la fin et que vous ne rencontrez aucune erreur. <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Untitled Document</title> </head> <body> <div id="hello"></div> <script type ="text/javascript"> what(); function what(){ document.getElementById('hello').innerHTML = 'hi'; }; </script> </body> </html>
Vous pouvez essayer d'utiliser la méthode setTimeout pour vous assurer que votre html est chargé en premier.
Ajouter jquery dans < head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
Utilisez $ document.ready () : le code peut être dans < head>
ou dans un fichier séparé comme main.js
1) en utilisant js dans le même fichier (ajoutez ceci dans < head>
):
<script> $( document ).ready(function() { function what(){ document.getElementById('hello').innerHTML = 'hi'; }; }); </script>
2) en utilisant un autre fichier comme main.js (ajoutez ceci dans < head>
):
<script type="text/javascript" src="/path/to/main.js" charset="utf-8"></script>
Et ajoutez le code dans le fichier principal.js 🙂
Vous devez changer div
en p
. Techniquement innerHTML signifie qu'il se trouve dans le <??? id=""></???>
<??? id=""></???>
partie.
Changement:
<div id="hello"></div>
dans
<p id="hello"></p>
Faire:
document.getElementById('hello').innerHTML = 'hi';
tournera
<div id="hello"></div> into this <div id="hello">hi</div>
Ce qui n'a pas de sens.
Vous pouvez également essayer de changer:
document.getElementById('hello').innerHTML = 'hi';
Dans ce
document.getElementById('hello').innerHTML='<p> hi </p> ';
Pour le faire fonctionner.
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Untitled Document</title> </head> <body> <div id="hello"></div> <script type ="text/javascript"> what(); function what(){ document.getElementById('hello').innerHTML = 'hi'; }; </script> </body> </html>
Change ça:-
document.getElementById('hello').innerHTML = 'hi';
à
document.getElementById("hello").innerHTML = "hi";