¿Por qué obtengo un error o Error de tipo no detectado: no se puede establecer la propiedad 'innerHTML' de nulo? Pensé que entendía innerHTML y lo tenía funcionando antes.
<!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>
javascript
onload
innerhtml
Joshua W
fuente
fuente
Primero intentemos comprender la causa raíz de por qué está sucediendo en primer lugar.
El navegador siempre carga todo el DOM HTML de arriba a abajo. Cualquier código JavaScript escrito dentro de las
script
etiquetas (presente en lahead
sección de su archivo HTML) es ejecutado por el motor de renderizado del navegador incluso antes de que se cargue todo su DOM (varias etiquetas de elementos HTML presentes en la etiqueta del cuerpo). Los scripts presentes en lahead
etiqueta intentan acceder a un elemento que tiene idhello
incluso antes de que se haya procesado en el DOM. Entonces, obviamente, JavaScript no pudo ver el elemento y, por lo tanto, terminará viendo el error de referencia nula.Desea mostrar el mensaje "hola" en la página tan pronto como el usuario llegue a su página por primera vez. Por lo tanto, debe conectar su código en un punto en el que esté completamente seguro del hecho de que DOM está completamente cargado y el
hello
elemento id es accesible / disponible. Se puede lograr de dos formas:hello
elemento de identificación ya esté cargado. Puede lograrlo simplemente moviendo la etiqueta del script después de todos los elementos DOM, es decir, en la parte inferior dondebody
termina la etiqueta. Dado que la renderización ocurre de arriba a abajo, sus scripts se ejecutan al final y no enfrenta ningún error.<!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
eventos que le da la pista de que el navegador ha terminado de cargar el DOM. Entonces, para cuando se active este evento, puede estar seguro de que su elemento con lahello
identificación ya cargada en el DOM y cualquier JavaScript activado a partir de entonces que intente acceder a este elemento no fallará. Entonces haces algo como el siguiente fragmento de código. Tenga en cuenta que en este caso, su secuencia de comandos funciona aunque esté presente en la parte superior de su documento HTML dentro de lahead
etiqueta.<!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>
fuente
Podrías decirle a javascript que realice la acción "onload" ... Prueba con esto:
<script type ="text/javascript"> window.onload = function what(){ document.getElementById('hello').innerHTML = 'hi'; }; </script>
fuente
Solo pon tu JS en
window.onload
window.onload = function() { what(); function what() { document.getElementById('hello').innerHTML = 'hi'; }; }
fuente
La parte de JavaScript debe ejecutarse una vez que se carga la página, por lo que se recomienda colocar el script de JavaScript al final de la etiqueta del cuerpo.
<!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>
fuente
Javascript se ve bien. Intente ejecutarlo después de que se haya cargado el div. Intente ejecutar solo cuando el documento esté listo.
$(document).ready
en jquery.fuente
window.onload
puede ser suficiente, pero también hay otros eventos disponibles.window
<!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>
fuente
Aquí está mi fragmento, pruébalo. Espero que te sea de ayuda.
<!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>
fuente
Puede intentar usar el método setTimeout para asegurarse de que su html se cargue primero.
fuente
La causa principal es: HTML en una página tiene que cargarse antes del código JavaScript . Resolviendo de 2 formas:
1) Permita la carga de HTML antes del código 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) Mover el código js debajo del código HTML
<div id="hello"></div> <script type ="text/javascript"> what(); function what(){ document.getElementById('hello').innerHTML = 'hi'; }; </script>
fuente
<!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>
fuente
He tenido el mismo problema y resulta que el error nulo se debió a que no había guardado el html con el que estaba trabajando.
Si el elemento al que se hace referencia no se ha guardado una vez cargada la página es 'nulo', porque el documento no lo contiene en el momento de la carga. El uso de window.onload también ayuda a depurar.
Espero que esto te haya sido útil.
fuente
Este error puede aparecer incluso si carga su secuencia de comandos una vez finalizada la renderización html. En este ejemplo dado, su código
<div id="hello"></div>
no tiene ningún valor dentro del div. Entonces se genera el error, porque no hay ningún valor que cambiar dentro. Debería haber sido
<div id="hello">Some random text to change</div>
entonces.
fuente
Agregar jquery en
< head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
Use $ document.ready () : el código puede estar en
< head>
o en un archivo separado como main.js1) usando js en el mismo archivo (agregue esto en
< head>
):<script> $( document ).ready(function() { function what(){ document.getElementById('hello').innerHTML = 'hi'; }; }); </script>
2) usando algún otro archivo como main.js (agregue esto en
< head>
):<script type="text/javascript" src="/path/to/main.js" charset="utf-8"></script>
y agregue el código en el archivo main.js :)
fuente
Necesitas cambiarte
div
ap
. Técnicamente innerHTML significa que está dentro de la<??? id=""></???>
pieza.Cambio:
<div id="hello"></div>
dentro
<p id="hello"></p>
Haciendo:
document.getElementById('hello').innerHTML = 'hi';
girará
<div id="hello"></div> into this <div id="hello">hi</div>
que en realidad no tiene sentido.
También puede intentar cambiar:
document.getElementById('hello').innerHTML = 'hi';
dentro de esto
document.getElementById('hello').innerHTML='<p> hi </p> ';
para que funcione.
fuente
El error se explica por sí mismo, no obtiene la etiqueta HTML en la que desea configurar los datos. Por lo tanto, haga que la etiqueta esté disponible para JS, entonces solo usted puede configurar los datos para eso.
fuente
Sin duda, la mayoría de las respuestas aquí son correctas, pero también puede hacer esto:
document.addEventListener('DOMContentLoaded', function what() { document.getElementById('hello').innerHTML = 'hi'; });
fuente
Hay diferentes causas posibles, como se discutió, solo me gustaría agregar esto para alguien que podría tener el mismo problema que el mío.
En mi caso, me faltaba un div cerrado como se muestra a continuación
La falta de un div cercano puede resultar en la desorganización de la transversal de hijo a padre o de padre a hijo, lo que resulta en un error cuando intenta acceder a un elemento en el DOM
fuente
Deje que se cargue el DOM. Para hacer algo en el DOM, primero debes cargarlo. En su caso,
<div>
primero debe cargar la etiqueta. entonces tienes algo que modificar. si carga el js primero, entonces esa función está buscandoHTML
que haga lo que pidió hacer, pero cuando ese momento seHTML
esté cargando y su función no pueda encontrar el archivoHTML
. Entonces puedes poner el guión al final de la página. dentro de la<body>
etiqueta, la función puede acceder a<div>
porque DOM ya está cargado en el momento en que ingresa al script.fuente