Pourquoi est-ce que je reçois une erreur ou uncaught TypeError: Je ne peux pas définir la propriété 'innerHTML' sur null? Je pensais avoir compris innerHTML et que cela fonctionnait 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 lors du chargement du script.
Vous devez dire à javascript pour exécuter l'action "onload" ... Essayez avec ceci:
<script type ="text/javascript">
window.onload = function what(){
document.getElementById('hello').innerHTML = 'hi';
};
</script>
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 profonde de la raison pour laquelle cela se produit en premier lieu.
Pourquoi est-ce que je reçois une erreur ou Uncaught TypeError: Impossible de définir la propriété 'innerHTML' de null?
Tout code javascript écrit à l'intérieur des balises script
(présent dans la section head
de votre fichier HTML) est exécuté par le moteur de rendu du navigateur même avant 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 head
tentent d'accéder à un élément ayant l'ID hello
avant même qu'il ait été restitué dans le DOM. Donc, évidemment, JavaScript n'a pas réussi à voir l'élément et vous avez donc fini par voir l'erreur de référence nulle.
Comment pouvez-vous le faire fonctionner comme avant?
Vous souhaitez afficher le message "hi" sur la page dès que l'utilisateur atterrit sur votre page pour la première fois. Vous devez donc connecter votre code à un moment où vous êtes complètement sûr du fait que DOM est entièrement chargé et que l'élément hello
id est accessible/disponible. Il est réalisable de deux manières:
hello
id est déjà chargé. Vous pouvez y parvenir en déplaçant simplement la balise de script après tous les éléments DOM, c'est-à-dire au bas de la balise body
. Comme le rendu s'effectue de haut en bas, vos scripts sont exécutés à la fin et vous ne faites face à 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>
window.onload
qui vous indique que le navigateur a terminé le chargement du DOM. Donc, au moment où cet événement est déclenché, vous pouvez être assuré que votre élément avec hello
id déjà chargé dans le DOM et que tout javascript déclenché par la suite qui tente d'accéder à cet élément n'échoue pas. Donc, vous faites quelque chose comme extrait de code ci-dessous. Veuillez noter que dans ce cas, votre script fonctionne même s'il se trouve en haut de votre document HTML dans la balise head
. <!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Untitled Document</title>
<script type ="text/javascript">
window.onload = function() {
what();
function what(){
document.getElementById('hello').innerHTML = 'hi';
};
}
</script>
</head>
<body>
<div id="hello"></div>
</body>
</html>
Il suffit de mettre 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 a l'air bien. Essayez de l'exécuter après le chargement de la div. Essayez de n'exécuter que lorsque le document est prêt. $(document).ready
in jquery.
Vous pouvez essayer d’utiliser la méthode setTimeout pour vous assurer que votre code HTML se charge en premier.
La partie JavaScript doit être exécutée une fois la page chargée. Il est donc conseillé de placer le script JavaScript à la fin 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>
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>
Cette erreur peut apparaître même si vous chargez votre script une fois le rendu html terminé. Dans cet exemple donné votre code
<div id="hello"></div>
n'a aucune valeur à l'intérieur de la div. Donc, l'erreur est générée, car il n'y a pas de valeur à changer à l'intérieur. Ça aurait dû être
<div id="hello">Some random text to change</div>
puis.
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 en < head>
ou dans un fichier séparé comme main.js
1) en utilisant js dans le même fichier (ajoutez ceci dans le < 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 le < head>
):
<script type="text/javascript" src="/path/to/main.js" charset="utf-8"></script>
et ajoutez le code dans le fichier main.js :)
<!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 devez changer div
en p
. Techniquement, innerHTML signifie qu'il se trouve dans la partie <??? id=""></???>
.
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 aussi essayer de changer:
document.getElementById('hello').innerHTML = 'hi';
dans cette
document.getElementById('hello').innerHTML='<p> hi </p> ';
pour le faire fonctionner.
J'ai eu le même problème et il s'est avéré que l'erreur nulle était due au fait que je n'avais pas enregistré le code HTML avec lequel je travaillais.
Si l'élément auquel il est fait référence n'a pas été enregistré une fois la page chargée, la valeur est "null", car le document ne le contient pas au moment du chargement. L'utilisation de window.onload facilite également le débogage.
J'espère que cela vous a été utile.
La cause principale est: HTML sur une page doit être chargé avant le code javascript . Résoudre de 2 manières:
1) Autoriser le chargement HTML avant le code js.
<script type ="text/javascript">
window.onload = function what(){
document.getElementById('hello').innerHTML = 'hi';
}
</script>
//or set time out like this:
<script type ="text/javascript">
setTimeout(function(){
what();
function what(){
document.getElementById('hello').innerHTML = 'hi';
};
}, 50);
//NOTE: 50 is milisecond.
</script>
2) Déplacez le code js sous le code HTML
<div id="hello"></div>
<script type ="text/javascript">
what();
function what(){
document.getElementById('hello').innerHTML = 'hi';
};
</script>