// Agregar acá el código javascript para los ejercicios //EJERCICIO 1 // 1. Inicialización del estado let contador = 0; // 2. Selecciono los elementos del DOM const boton = document.getElementById('boton-contador'); const parrafo = document.getElementById('texto-contador'); // 3. Registro del Event Listener utilizando una función clásica boton.addEventListener('click', function () { // Incremento el valor de la variable en 1 contador++; // Actualizo el contenido de texto del párrafo parrafo.textContent = `Botón clickeado ${contador} veces.`; }); //EJERCICIO 2 // 1. Selección de los elementos del DOM const campo = document.querySelector("#campo-texto"); const contadorcaracteres = document.querySelector("#contador-caracteres"); // 2. Registro del Event Listener utilizando una función clásica campo.addEventListener("input", function (e) { // Obtengo el texto actual del campo const textoActual = e.target.value; // Calculo la longitud del texto const cantidadCaracteres = textoActual.length; // Actualizo el contenido del párrafo contadorcaracteres.textContent = `Caracteres ingresados: ${cantidadCaracteres}`; }); //EJERCICIO 3 // 1. Selecciono el elemento padre (la lista) const lista = document.querySelector("#lista-items"); // 2. Registro un único listener en el elemento padre lista.addEventListener("click", function (e) { // Valido si el elemento exacto que recibió el clic es un
  • if (e.target.tagName === "LI") { // Busco si existe actualmente algún ítem con la clase 'seleccionado' const itemSeleccionadoPrevio = lista.querySelector(".seleccionado"); // Si se encuentra un ítem seleccionado, se le remueve la clase if (itemSeleccionadoPrevio) { itemSeleccionadoPrevio.classList.remove("seleccionado"); } // Agrego la clase 'seleccionado' al ítem que disparó el evento e.target.classList.add("seleccionado"); } }); //EJERCICIO 4 // 1. Selecciono los tres elementos del DOM utilizando sus IDs y etiquetas const externo = document.querySelector("#externo"); const interno = document.querySelector("#interno"); const botonej4 = document.querySelector("#boton-ej4"); // 2. Registro de un listener en fase de Capturing (Descenso). Al pasar 'true' como tercer argumento, este código se ejecuta primero, // cuando el evento baja desde la raíz del DOM hacia el botón. externo.addEventListener("click", function () { console.log("externo capturing"); }, true); // 3. Registro de listeners en fase de Bubbling (Ascenso) // Estos listeners no tienen un tercer argumento (o es 'false' por defecto), // por lo que se ejecutan cuando el evento sube desde el elemento origen. botonej4.addEventListener("click", function () { console.log("boton"); }); interno.addEventListener("click", function () { console.log("interno"); }); externo.addEventListener("click", function () { console.log("externo"); }); //EJERCICIO 5 // 1. Selecciono el formulario y contenedores globales del DOM const formulario = document.querySelector("#formulario-contacto"); const mensajeExito = document.querySelector("#mensaje-exito"); // 2. Registro el Event Listener para el evento "submit" formulario.addEventListener("submit", function (e) { // Evito el comportamiento por defecto de recargar la página e.preventDefault(); // 3. Selecciono los elementos de entrada de datos const inputNombre = document.querySelector("#nombre"); const inputEdad = document.querySelector("#edad"); const inputMensaje = document.querySelector("#mensaje"); // 4. Selecciono los elementos contenedores de error const errorNombre = document.querySelector("#error-nombre"); const errorEdad = document.querySelector("#error-edad"); const errorMensaje = document.querySelector("#error-mensaje"); // 5. Obtengo y limpio los valores ingresados (eliminando espacios) const nombreVal = inputNombre.value.trim(); const edadVal = inputEdad.value.trim(); const mensajeVal = inputMensaje.value.trim(); // Variable de control para el estado de la validación let formularioValido = true; // 6. Limpio mensajes de error anteriores y el mensaje de éxito errorNombre.textContent = ""; errorEdad.textContent = ""; errorMensaje.textContent = ""; mensajeExito.style.display = "none"; mensajeExito.textContent = ""; // 7. Valido el campo Nombre (No vacío) if (nombreVal === "") { errorNombre.textContent = "El nombre no puede estar vacío."; formularioValido = false; } // 8. Valido el campo Edad (No vacío, entero positivo y menor a 120) // Convierto el string a número entero para las comprobaciones numéricas const edadEntero = parseInt(edadVal, 10); if (edadVal === "") { errorEdad.textContent = "La edad no puede estar vacía."; formularioValido = false; } else if (isNaN(edadEntero) || Number(edadVal) !== edadEntero || edadEntero <= 0) { // Valida que sea un número válido, que no tenga decimales y sea mayor a 0 errorEdad.textContent = "La edad debe ser un número entero positivo."; formularioValido = false; } else if (edadEntero >= 120) { errorEdad.textContent = "La edad debe ser menor que 120."; formularioValido = false; } // 9. Valido el campo Mensaje (No vacío) if (mensajeVal === "") { errorMensaje.textContent = "El mensaje no puede estar vacío."; formularioValido = false; } // 10. Si todos los campos son válidos, proceso el formulario if (formularioValido) { // Muestro mensaje de éxito en la página mensajeExito.textContent = "¡Formulario enviado con éxito!"; mensajeExito.style.display = "block"; // Limpio el contenido de cada uno de los campos expuestos del formulario inputNombre.value = ""; inputEdad.value = ""; inputMensaje.value = ""; } });