Diego Miguel Ortiz Rodríguez
El profe Juan David Castro, explica MUY BIEN. Tanto, que me divierto mucho aprendiendo con él. :)
Juan Castro
Profesor:green_heart::green_heart::green_heart:
Emily Joselyn Heredia Pérez
Si totalmente explica excelente!
Vincular JavaScript a HTML y hacer que un botón responda al clic es el primer paso real para darle vida a un proyecto web. Aquí aprenderás cómo conectar un archivo .js externo, seleccionar elementos por su id y escuchar eventos como el clic, usando como ejemplo el botón de seleccionar mascota del juego Mokepon.
¿Cómo se vincula un archivo JavaScript externo a HTML?
La forma profesional de trabajar no es escribir el código dentro del HTML, sino mantenerlo en un archivo aparte. Para eso usas la etiqueta script con el atributo src, que indica la ruta al archivo .js.
La nomenclatura de rutas es sencilla: el punto representa la carpeta actual y el slash separa carpetas y archivos. Si guardas tu código en una subcarpeta llamada js, la ruta queda así:
html
<script src="./js/mokepon.js"></script>Esto significa que, partiendo desde donde está tu HTML, entras a la carpeta js y dentro buscas el archivo mokepon.js. Para verificar que la conexión funciona, puedes escribir una alert("Hola, mundo JS") dentro del archivo y recargar la página [2:50]. Si aparece la alerta, ya está vinculado.
¿Qué hace el atributo src en la etiqueta script? Le dice al navegador dónde encontrar el archivo JavaScript externo que debe cargar y ejecutar junto con el HTML.
¿Cómo seleccionar un botón con getElementById?
Un HTML real tiene muchos botones: seleccionar, fuego, agua, tierra, reiniciar. Para que JavaScript sepa exactamente cuál escuchar, cada botón necesita un identificador único usando el atributo id.
En el ejemplo se asignan estos identificadores:
boton-mascota para seleccionar la mascota.boton-fuego, boton-agua y boton-tierra para los ataques.boton-reiniciar para reiniciar el juego.Luego, en el archivo JavaScript, creas una variable que apunta a ese botón usando el método getElementById del objeto document, que representa todo el documento HTML.
javascript let botonMascotaJugador = document.getElementById("boton-mascota")
Fíjate en el detalle del nombre de la variable: en JavaScript no se aceptan guiones medios dentro de los nombres. La convención más común es camelCase, donde la primera palabra va en minúscula y cada palabra siguiente empieza con mayúscula, sin espacios ni guiones [6:30].
¿Por qué no usar guiones en los nombres de variables?
JavaScript interpreta el guion medio como una operación de resta, así que rompería tu código. El guion bajo sí funciona, pero la comunidad prefiere camelCase por legibilidad y consistencia con la mayoría de librerías.
¿Cómo escuchar el evento clic con addEventListener?
Una vez seleccionado el botón, necesitas decirle a JavaScript qué evento escuchar y qué hacer cuando ocurra. Para eso usas el método addEventListener, que recibe dos argumentos: el tipo de evento y la función a ejecutar.
javascript botonMascotaJugador.addEventListener("click", seleccionarMascotaJugador)
function seleccionarMascotaJugador() { alert("Seleccionaste tu mascota") }
El primer argumento, entre comillas, es el nombre del evento; en este caso "click". El segundo es la función que se dispara cuando el usuario hace clic. Esa función la creas con la palabra reservada function y dentro de las llaves colocas el código a ejecutar [10:20].
¿Qué es addEventListener? Es un método que conecta un elemento HTML con un evento (clic, hover, tecla) y ejecuta una función cuando ese evento ocurre.
¿Por qué aparece el error Cannot read properties of null?
Si al recargar tu página le das clic al botón y nada pasa, abre la consola del navegador con clic derecho e inspeccionar. Probablemente verás un error como:
Uncaught TypeError: Cannot read properties of null (reading 'addEventListener')
Ese mensaje significa que JavaScript intentó ejecutar addEventListener sobre algo que es null, es decir, sobre un botón que no encontró. Y aquí viene lo interesante: el problema no es tu código, es el orden de carga.
Si colocas la etiqueta script dentro del head, JavaScript se ejecuta antes de que el navegador haya leído el body. Cuando getElementById busca boton-mascota, ese elemento todavía no existe en el documento [13:40].
¿Cómo se soluciona el error de elemento null?
Hay dos caminos válidos:
script justo antes del cierre de </body>, para que el HTML cargue primero.La primera solución es la más rápida para empezar. Apenas reubicas el script al final del body y recargas, el error desaparece y al hacer clic verás la alerta Seleccionaste tu mascota.
Habilidades y conceptos clave de la clase
Esta clase concentra fundamentos que vas a usar en todo proyecto web:
script src y rutas relativas usando punto y slash [1:30].click y ejecutar funciones [9:30].TypeError [12:50].¿Ya lograste que tu botón responda al clic? Cuéntame en los comentarios qué ID le pusiste a tu botón y si te apareció el error de null en la consola.
Diego Miguel Ortiz Rodríguez
El profe Juan David Castro, explica MUY BIEN. Tanto, que me divierto mucho aprendiendo con él. :)
Juan Castro
Profesor:green_heart::green_heart::green_heart:
Emily Joselyn Heredia Pérez
Si totalmente explica excelente!
Sebastián Carrillo Fonseca
Eventos que podemos escuchar con: addEventListener("")
Edgar Contreras
Gracias por este aporte, compañero.
Andres Velasquez
Que info más valiosa!
Alejandro Cáceres
Defer, un atributo muy util al ejecutar el JavaScript
Otra forma de evitar que cargue JavaScript antes de que un elemento exista y nos de el error que se explica en el minuto 13:50 más o menos es el atributo "defer"
Ej:
<script defer src='./codigo.js'></script>
Es basicamente decirle al html algo como: "Oye, html" HTML: "Dime, oh gran programador". Tú: "Aquí hay código en JavaScript que necesitamos ejecutar, pero necesito que primero cargues todos los elementos de html para que no haya problemas y cuando termines carga el JavaScript" HTML: "Ok, dale 👍 "
Y así nos evitamos que JavaScript diga: "Necesito trabajar con un elemento que aún no existe"
Esto es tan útil que herramientas como Webpack al compiar TODO el proyecto lo hacen por default sin que nos enteremos 😁
Oswaldo Alonzo
Otra forma sin utilizar "defer" es: dentro del archivo js, la primera instrucción que se escribe es:
window.reload inicio; --- donde inicio sera una función
function inicio() { y dentro de estas llaves escribimo el codigo js que necesitamos que se ejecute al iniciar. }
Santiago Fernández Cabal
TY!
Edison Manrique
El profe Juan cuando el alert no se ejecutaba al oprimir el botón:
Juan Castro
Profesor:joy::joy::joy::joy::joy::joy:
Marwan El Ouarti
Lo has clavado
Ameth Ordoñez Erazo
Asi se llaman los tipos de nombramientos de variables: 🐪 camelCase 🧮 PascalCase 🐍 snake_case 🍢 kebab-case
Erick Alay
Como buen Pythonista que soy amo el 🐍 snake_case, aunque dependiendo de la situación se usa uno u otro.
Bryan Andres Vera Garcia
¿Cuando se usa uno y otro?
Rocio Maribel Ramirez Paez
Cesar David
gracias
Diego Enrique
diablo pero que buen aporte
Fernando Yutiz
En Visual Studio Code pueden generar una nueva carpeta, usando el siguiente botón.
Luis Tapia
Enmanuel vicioso
broth gran ayuda gracias, uso una mac y forma no tenia de poder enlazarlo en conjunto
Patricio Mariano
Una manera mas rápida de crear los ficheros: Se escribe la ruta antes de que exista el archivo, luego se hace Ctrl+Click sobre dicha ruta, luego les saldrá una alerta para que el mismo Visual Studio crea la carpeta y el archivo correspondiente
<script src="./js/mokepon.js"></script>
Eddie Mora
Muy bueno, bastante útil
Ibis Amaya
oooohhh
Ronald Ramírez Sarmiento
Lograron hacer que el aprender programación sea divertido. Me está gustando mucho este curso básico.
spencer Mm
cuando algo nos gusta , nos gusta por naturalidad...pero encima lo explican bien, despiertan la pasión.
Grehtlingmar Fernandez
Juan David explica tan bien, que hasta mis 2 hijos están aprendiendo conmigo 😀
Juan Castro
Profesor¡Qué maravilla, Greht! :green_heart::green_heart::green_heart:
Edú Jafet Sánchez Garrido
al profe Freddy me da ganas de saludarlo con un apreton de manos, pero a ti te quiero dar un abrazo jajajaj Buenisimo el como explicas Juan.
Irving Caamal
Como Web-Devs La MDN será una de las fuentes de información más confiables y que más usaremos y como es de esperar hay unas sección dedicada a Eventos
Matias Icardi
No se si debe a la version del sistema operativo,como lei en otro comentario, pero en este caso ni documento HTML no relaciono el JS ni para el primer alert que vimos de saludo ni para el de seleccion de mascota
Juan Castro
ProfesorNah. No tiene que ser con el S.O. ¿Nos muestras por fa tu código para ayudarte a identificar el error?
David Ulises Cubías Mercado
me pasa lo mismo
Alejandro Rojas Maldonado
cual es la diferencia entre estas comillas " y estas '
Juan Castro
ProfesorSon exactamente lo mismo. Puedes usar cualquiera. Solo asegúrate de siempre usar las mismas para evitar dolores de cabeza tratando de encontrar errores causados por eso. :sweat_smile:
Alejandro Rojas Maldonado
gracias es que soy nuevo en esto
Eluizer Amadeus De León de Leon
funciona siuuuuuuuuu
Griger Ratia
😂
Juana Barreto
yo le cambie el nombre a los personajes
Euge Oller
Compártenos que nombre le pusiste? 😊
sara arias aristizabal
x2
Esdras Paniagua
como odio las fallas en las letras jajajjajaja
Aimee Ortiz Montenegro
Profe confieso que estaba desmotivada al saber de Freddy ya no seguía el curso, pero usted me ha parecido un excelente profesional, supero mis expectativas, explica al detalle, he aprendido mucho con usted. Muchas gracias
Juan Castro
Profesor:green_heart::green_heart::green_heart:
Luis Fernando Mafla Arboleda
otra forma que también es simple es agregar una especie de atributo a la etiqueta "script" justo después del source que es "defer" esto cumple la misma función que poner lo al final de las etiquetas y que usar el eventListener onload que creo que es lo que va a hacer ejemplo :
<script src="./scripts/mokepon.js" defer></script>
rogelioelprro23
Wow antiguamente siempre me marcaba error por que me aparecia que atributo addEventListener() era null y no me aparecia el aler ni nada de la funcion. enserio muchisimas gracias 😇😇😇
document.getElementById= Busca en HTML un elemento que se reconoce mediante su ID .addEventListener = - Es un método. - Llamamos a su función mediante los paréntesis. - Decidir que evento queremos darle, en esta clase es el evento 'click' - Para decirle a JS que hacer cuando se le hace click debemos 1. Poner una coma para separar un argumento de otro. 2. Poner un nombre, en este caso es "seleccionarMascotaJugador" (nombre de la función que queremos ejecutar) ¿Qué otros aportes podemos dar?