CodeForge

JavaScript de Cero a Experto / Eventos y listeners

Reto: Mi Bolsillo interactivo

Reto45 min100 XP

Este es el hito del supercurso hasta ahora: tu primera APLICACIÓN completa. Formulario que valida y agrega, borrado por delegación, y un total que se recalcula solo gracias a un evento propio. Módulos 5, 6, 7 y 8 trabajando juntos en una sola página — exactamente como en el mundo real.

Reto

Mi Bolsillo interactivo

Difícil40 min100 XP(×2 sin mirar la solución)

Qué debes construir

La app funciona así (pruébala — esta vista previa es LA META, completamente funcional):

El HTML de partida trae el formulario, #error, la #lista vacía y el #total (mismo markup de la vista previa). Requisitos:

  1. Render inicial: los 3 gastos del array gastosIniciales (Almuerzo 18000, Bus 5800, Café 4500) se pintan al cargar con una función crearItemcreateElement, cero innerHTML — y UNA sola inserción.
  2. Cada li guarda su valor crudo en dataset.valor y trae un botón con clase borrar.
  3. Agregar: submit + preventDefault; nombre sin espacios sobrantes (trim) no vacío y valor numérico mayor que 0. Si falla: mensaje en #error y no se agrega nada. Si pasa: error limpio, item nuevo, form.reset() y focus() al campo nombre.
  4. Borrar por delegación: UN solo listener en la ul (con closest y su chequeo de null) — nada de listeners por botón; debe funcionar en items agregados después.
  5. Total reactivo con CustomEvent: agregar y borrar NO calculan nada — solo disparan bolsillo:cambio en document. El ÚNICO lugar que calcula es el listener de ese evento: lee los li del DOM, suma sus dataset.valor con reduce y pinta el total.
  6. Formato: un Intl.NumberFormat de pesos (es-CO, COP, sin decimales) creado una sola vez, usado en items y total.

Reglas

  • Cero innerHTML: el nombre lo escribe el usuario (lección 3 del módulo 7 — eso es sagrado).
  • El total SIEMPRE sale de leer el DOM en el listener del evento — nada de variables acumuladoras regadas por el código.
  • Patrón iniciar para esperar el DOM.
  • Todo el CSS ya está dado: este reto es 100% JavaScript.

40:00

Cuando estés listo, arranca el reloj.

Qué sigue

Dos módulos y "Mi Bolsillo" pasó de imprimir en consola a ser una app que responde al usuario. Pero todos tus datos siguen viviendo en la página: al recargar, se esfuman — y traerlos de un servidor toma tiempo. El módulo 9 abre la puerta grande: ASINCRONÍA — callbacks, promesas y el arte de esperar sin congelar la página. El JavaScript que separa a los junior de los que pasan la entrevista.