
Alejandro Jesús Morales Marcos
PreguntaHola buenas. Mi programa funciona con document.write, pero al sustituirlo por innerHTML me arroja el siguiente error en consola: Uncaught TypeError: Cannot read property ‘innerHTML’ of null
at HTMLInputElement.entregarDinero (cajero.js:54)
entregarDinero @ cajero.js:54
Decir que el id en html de la etiqueta <p> es resultado: <p id=“resultado”></p>
Adjunto código js:
class Billete { constructor(v, c) { this.valor = v; this.cantidad = c; } } function entregarDinero() { var t = document.getElementById("texto"); var dinero = parseInt(t.value); for (b of caja) { if (dinero > 0) { division = Math.floor(dinero/b.valor); if (division > b.cantidad) { papeles = b.cantidad; } else { papeles = division; } entregado.push(new Billete(b.valor, papeles)); dinero -= (b.valor * papeles); } } if (dinero > 0) { resultado.innerHTML = "El cajero no dispone de suficiente dinero"; } else { for (var e of entregado) { if (e.cantidad > 0) { resultado.innerHTML += e.cantidad + "Billetes de " + e.valor + "€ <br />"; } } } } var caja = []; caja.push(new Billete(50, 3)); caja.push(new Billete(20, 2)); caja.push(new Billete(10, 2)); var division = 0; var papeles = 0; var entregado = []; var resultado = document.getElementById("resultado"); var b = document.getElementById("boton"); b.addEventListener("click", entregarDinero);```

Fernanda Vieira Jófili
Interesante! Gracias por compartir la solución, ¡eso es muy importante!

Alejandro Jesús Morales Marcos
Solucioné el error yo mismo. Consistía en que la etiqueta <p> del párrafo dónde la variable resultado tenía que mostrar su valor por medio de innerHTML, estaba declarado en el archivo .html por debajo de la etiqueta <script>.

Alejandro Jesús Morales Marcos
Gracias por responder; Aquí el código HTML:
<code><!DOCTYPE html> <html> <meta charset="utf-8" /> <body> <p><img src="cajero.gif"></p> <p><input type="number" id="texto" /> <input type="button" value="Extraer" id="boton" /></p> <script src="cajero.js"></script> <p id="resultado"></p> </body> </html>
Aquí el console.log(resultado) : null cajero.js:60

Ayrton Soto
Puedes pasar el codigo del HTML tambien, o trata de hacer un console.log a resultado para ver si esta reconociendo el elemento html quizas eso ayude a ver el motivo del problema

Alejandro Jesús Morales Marcos
Ante todo gracias por la respuesta. He cambiado la línea:
resultado.innerHTML += e.cantidad + "Billetes de " + e.valor + "€ <br />";
por:
resultado.innerHTML = resultado.innerHTML + e.cantidad + "Billetes de " + e.valor + "€ <br />";
Y me sigue dando el mismo error: cajero.js:44 Uncaught TypeError: Cannot read property 'innerHTML' of null at HTMLInputElement.entregarDinero (cajero.js:44)

José David Ureña Torres
Creo que es por la operacion aritmética "+=" con el innerHTML. Prueba hacer la suma en variables y luego incrustar el resultado en la etiqueta.