From 28e2e92142379d4ce15dcf4150cb669fde658436 Mon Sep 17 00:00:00 2001 From: Sergio Madera De Marco <37299705@terciariourquiza.edu.ar> Date: Sun, 24 May 2026 14:02:29 -0300 Subject: [PATCH] ejercicio 1: contador de clicks con addEventListener --- clase-9.js | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++- estilo.css | 31 +++++++++++++++ index.html | 41 +++++++++++++++++--- 3 files changed, 178 insertions(+), 6 deletions(-) diff --git a/clase-9.js b/clase-9.js index 6df1007..171a44e 100644 --- a/clase-9.js +++ b/clase-9.js @@ -1 +1,111 @@ -// Agregar acá el código javascript para los ejercicios +// Ejercicio 1 - Contador de clics +let clickCount = 0; +const boton = document.getElementById('miBoton'); +const parrafo = document.getElementById('contadorClicks'); + +boton.addEventListener('click', function() { + clickCount++; + parrafo.textContent = `Botón clickeado ${clickCount} veces`; +}); + +// Ejercicio 2 - Contador de caracteres en tiempo real +const inputTexto = document.getElementById('campoTexto'); +const contadorCaracteres = document.getElementById('contadorCaracteres'); + +inputTexto.addEventListener('input', function() { + contadorCaracteres.textContent = `Caracteres ingresados: ${inputTexto.value.length}`; +}); + +// Ejercicio 3 - Selección única en lista mediante delegación de eventos +const lista = document.getElementById('listaItems'); + +lista.addEventListener('click', function(event) { + const item = event.target.closest('li'); + if (!item || !lista.contains(item)) { + return; + } + + lista.querySelectorAll('li').forEach(function(li) { + li.classList.remove('seleccionado'); + }); + item.classList.add('seleccionado'); +}); + +// Ejercicio 4 - Listeners de bubbling y capturing +const externo = document.getElementById('externo'); +const interno = document.getElementById('interno'); +const botonExterno = document.getElementById('botonExterno'); + +externo.addEventListener('click', function() { + console.log('bubbling: externo'); +}); + +interno.addEventListener('click', function() { + console.log('bubbling: interno'); +}); + +botonExterno.addEventListener('click', function() { + console.log('bubbling: button'); +}); + +externo.addEventListener('click', function() { + console.log('capturing: externo'); +}, true); + +// Ejercicio 5 - Validación de formulario +const formulario = document.getElementById('formulario'); +const nombreInput = document.getElementById('nombre'); +const edadInput = document.getElementById('edad'); +const mensajeInput = document.getElementById('mensaje'); +const errorNombre = document.getElementById('errorNombre'); +const errorEdad = document.getElementById('errorEdad'); +const errorMensaje = document.getElementById('errorMensaje'); +const formResultado = document.getElementById('formResultado'); + +function limpiarErrores() { + errorNombre.textContent = ''; + errorEdad.textContent = ''; + errorMensaje.textContent = ''; + formResultado.textContent = ''; +} + +formulario.addEventListener('submit', function(event) { + event.preventDefault(); + limpiarErrores(); + + let esValido = true; + const nombre = nombreInput.value.trim(); + const edadValor = edadInput.value.trim(); + const mensaje = mensajeInput.value.trim(); + + if (!nombre) { + errorNombre.textContent = 'El nombre no puede estar vacío.'; + esValido = false; + } + + if (!edadValor) { + errorEdad.textContent = 'La edad no puede estar vacía.'; + esValido = false; + } else if (!/^[0-9]+$/.test(edadValor)) { + errorEdad.textContent = 'La edad debe ser un número entero positivo.'; + esValido = false; + } else { + const edad = parseInt(edadValor, 10); + if (edad <= 0 || edad >= 120) { + errorEdad.textContent = 'La edad debe ser mayor que 0 y menor que 120.'; + esValido = false; + } + } + + if (!mensaje) { + errorMensaje.textContent = 'El mensaje no puede estar vacío.'; + esValido = false; + } + + if (esValido) { + formResultado.textContent = 'Formulario enviado con éxito.'; + nombreInput.value = ''; + edadInput.value = ''; + mensajeInput.value = ''; + } +}); diff --git a/estilo.css b/estilo.css index 19d93f8..e234624 100644 --- a/estilo.css +++ b/estilo.css @@ -3,3 +3,34 @@ div { padding: 10px; margin: 10px; } + +.seleccionado { + background-color: #7DAA3C; + color: #fff; +} + +#listaItems { + list-style: none; + padding: 0; +} + +#listaItems li { + cursor: pointer; + padding: 5px; + margin: 4px 0; + border: 1px solid #8A8A8A; +} + +.error { + color: #b30000; + font-size: 0.9em; + display: block; + margin-top: 4px; +} + +.success { + color: #0a6f0a; + font-weight: bold; + margin-top: 10px; +} + diff --git a/index.html b/index.html index 2a6b85f..f0cbe6c 100644 --- a/index.html +++ b/index.html @@ -9,23 +9,54 @@
Botón clickeado 0 veces
Caracteres ingresados: 0