¿Cómo manejar un formulario con JavaScript?
El manejo de formularios con JavaScript muestra cómo funciona la lectura de datos al producirse el evento submit. Permite aplicar validación antes del envío de la información. Con ejemplos prácticos, se comprende cómo interactuar con los campos desde el DOM. Esto aporta mayor control y dinamismo al formulario.

Índice
1. ¿Qué es un formulario y porqué usamos JavaScript?
1.1. ¿Qué es un formulario en HTML?
Un formulario html (<form>) es un contenedor especial en una página web diseñado para recolectar información del usuario.
Pensalo como un formulario de papel físico (como el que llenás en un médico). Tiene diferentes secciones:
- Campos de texto (
<input type="text">): Para nombres o datos cortos. - Selectores (
<select>): Menús desplegables. - Botones de opción (
<input type="radio">): Para elegir una sola opción. - El botón de envío (
<button type="submit">): El acto de entregar el papel.
TRADICIONALMENTE…..cuando hacías clic en «Enviar», el navegador tomaba todos esos datos, recargaba la página y los mandaba a un servidor. Ahí es donde JavaScript entra para cambiar las reglas del juego.
1.2. ¿Qué significa «Manejo de formularios con JavaScript»?
Manejar un formulario con JS significa tomar el control total de lo que sucede desde que el usuario empieza a escribir hasta que los datos se envían. En lugar de dejar que el navegador haga su proceso automático (el tradicionalmente), nosotros intervenimos.
¿Por qué lo hacemos? (Los 3 pilares)
- Intercepción:
- Evitamos que la página se recargue (lo cual daría una mala experiencia de usuario). JS «atrapa» el evento de envío.
- Validación en tiempo real:
- Verificamos si los datos son correctos (ej. «¿puso el
@en el email?») antes de que el usuario intente enviar nada.
- Verificamos si los datos son correctos (ej. «¿puso el
- Comunicación silenciosa (AJAX/Fetch):
- Enviamos los datos al servidor «por detrás», permitiendo que el usuario siga navegando en la misma página mientras el formulario se procesa.
RESUMEN: HTML pone la estructura (el papel y los campos), y JavaScript pone la inteligencia (validar, procesar y enviar sin interrumpir la experiencia).
2. ¿Porqué es importante la manipulación de formularios con JS?
Sin JavaScript, los formularios son «estáticos» y dependen totalmente del navegador. Con JavaScript, los formularios se vuelven «inteligentes». Aquí te explico por qué es vital en el desarrollo profesional:
2.1. Experiencia de Usuario (UX) Fluida
Sin JS, cuando hacés clic en «Enviar», la pantalla se pone en blanco por un segundo y toda la página se recarga. Eso en 2026 se siente «viejo».
- Con JS: Interceptamos el envío y mandamos los datos «por atrás» (en segundo plano). El usuario nunca deja la página y puede seguir haciendo otras cosas.
2.2. Validación instantánea (Feedback)
Imaginá que estás creando una cuenta y, tras llenar 20 campos y darle a «Enviar», la página recarga y te dice: «El nombre de usuario ya existe». ¡Es frustrante!
- Con JS: Podemos validar mientras el usuario escribe. Si el email no tiene un
@o la contraseña es muy corta, le avisamos en el momento, pintando el campo de rojo sin que tenga que intentar enviar nada.
2.3. Lógica condicional (Formularios dinámicos)
A veces querés que el formulario cambie según lo que el usuario elija.
- Ejemplo: Si en un selector el usuario elige «Empresa», querés que aparezca un campo para el «CUIT». Si elige «Persona», ese campo debe estar oculto.
- Importancia: Esto es imposible de hacer solo con HTML. JavaScript «escucha» los cambios y modifica el DOM en tiempo real para mostrar solo lo necesario.
2.4. Transformación de datos
A veces lo que el usuario escribe no es exactamente lo que el servidor necesita recibir.
- Ejemplo: El usuario escribe una fecha como
20/05/2026, pero tu base de datos necesita2026-05-20. Con JS, capturamos el dato, lo reformateamos y lo enviamos perfecto.
2.5. Evitar el «Doble Envío»
¿Alguna vez hiciste clic muchas veces en un botón de «Comprar» porque internet estaba lento? Sin JS, podrías terminar comprando el producto 5 veces.
- Con JS: En cuanto el usuario hace clic una vez, nosotros desactivamos el botón mediante código hasta que el servidor nos responda.
EN RESUMEN: El manejo de formularios con JS es lo que transforma una página web simple en una Aplicación Web profesional y robusta. Es lo que separa a un programador novato de uno que sabe construir productos de calidad.
3. ¿Cómo manejar un formulario con JS?
- Paso 0 la base: HTML mínimo correcto
- Paso 1 Seleccionar el formulario desde JavaScript
- Paso 2: Escuchar el evento submit
- Paso 3: Cancelar el envío automático con event.preventDefault()
- Paso 4: Leer los valores de los campos del formulario
- Paso 5: Validar datos del formulario con JavaScript
- Paso 6: Mostrar errores en el DOM (no con alert)
- Paso 7: Enviar datos:
- Paso 8: Limpiar el formulario
Paso 0 la base: HTML mínimo correcto
Antes de JavaScript, el formulario debe estar bien construido.
EJEMPLO de un formulario HTML bien estructurado:
<form id="form-registro" name="formRegistro" class="formulario-estilizado">
<fieldset>
<legend>Información Personal</legend>
<div class="campo">
<label for="nombreUsuario">Nombre de usuario:</label>
<input
type="text"
id="nombreUsuario"
name="username"
required
placeholder="Ej: juan_perez"
>
</div>
<div class="campo">
<label for="correoElectronico">Email:</label>
<input
type="email"
id="correoElectronico"
name="email"
required
>
</div>
</fieldset>
<button type="submit">Crear Cuenta</button>
</form>Lenguaje del código: JavaScript (javascript)
¿Por qué esta estructura es perfecta para JavaScript?
Para que un formulario sea «manejable» por JS, debe cumplir con estos 4 pilares:
A. El atributo name (Vital)
Es el más importante para JS. Mientras que el id sirve para el CSS o para un elemento único, el name es la llave con la que JavaScript identifica el dato.
- Para JS: Si usás
FormData, JS buscará automáticamente todos los elementos que tengan unname. Si no tienename, ese dato «no existe» para el envío automático.
B. La vinculación label + input
Fijate que el for del <label> coincide con el id del <input>.
- Para JS: Esto mejora la accesibilidad. Además, si necesitás manipular el foco del cursor programáticamente, esta relación asegura que el navegador entienda qué etiqueta pertenece a qué campo.
C. Tipos de Input Semánticos (type="email", type="number")
No uses type="text" para todo.
- Para JS: Si usás el tipo correcto, JavaScript puede aprovechar la Validación Nativa. Por ejemplo, si el usuario no pone un
@, el navegador frenará el envío antes de que tu script tenga que procesar un dato inválido.
D. Uso de <fieldset> y <legend>
Esto agrupa campos relacionados.
- Para JS: Imagina un formulario gigante. Podés deshabilitar secciones enteras (como un grupo de datos de facturación) simplemente aplicando
disabledalfieldsetdesde JavaScript, en lugar de ir uno por uno por cada input.
Paso 1 Seleccionar el formulario desde JavaScript
¿Qué significa “seleccionar” un formulario?
Significa obtener una referencia al formulario HTML <form> que ya existe en el DOM, para poder:
- Escuchar eventos (
submit) - Leer sus campos
- Manipular su estado
- Controlar su comportamiento
Sin selección, JavaScript no puede hacer nada.
¿Cómo seleccionamos el formulario con js?
Podemos seleccionar por id (la forma más común y segura).
ACLARACIÓN: Aquí aclaramos que existen otras maner,as pero en este caso nos enfocaremos en la manipulación del selector CSS de ID.
¿Qué es un id en HTML? El atributo id:
- Identifica un único elemento en todo el documento
- No puede repetirse
- Es ideal para que JavaScript lo encuentre sin ambigüedad
EJEMPLO:
<form id="contactForm">
...
</form>Lenguaje del código: HTML, XML (xml)
Acá:
contactFormidentifica solo a este formulario- No hay otro igual en la página
¿Cómo JavaScript “selecciona por id”?
Cuando hacés:
const form = document.querySelector('#contactForm');Lenguaje del código: JavaScript (javascript)
Estás diciendo: “Buscá en el documento el elemento cuyo id es contactForm y traémelo”.
¿Por qué es la forma más segura?
Porque:
- El
ides único - No depende de la estructura
- No se rompe si agregás más formularios
- Es claro y explícito
❌ En cambio:
document.querySelector('form');Lenguaje del código: JavaScript (javascript)
Puede fallar si hay varios formularios.
RECUERDA: El DOM actúa como puente entre HTML y JavaScript
Esta parte conecta directamente con la selección del formulario.
¿Qué pasa cuando el navegador carga el formulario HTML?
Supongamos este HTML:
<form id="contactForm">
<input type="text" name="name">
</form>Lenguaje del código: HTML, XML (xml)
- Primero, el navegador lee el HTML
- El navegador no deja el HTML como texto.
Una vez cargado el formulario, cada etiqueta se convierte en un nodo
<form>→ nodo<input>→ nodo
Estos nodos:
- Tienen propiedades
- Tienen métodos
- Tienen relaciones (padre / hijo)
Ahora, el navegador construye el DOM (Document Object Model).
Ejemplo conceptual:
document
└── form (id="contactForm")
└── input (name="name")Lenguaje del código: JavaScript (javascript)
Como dijimos, JavaScript NO trabaja con HTML directamente.
JavaScript:
❌ No manipula etiquetas como texto
❌ No “lee” HTML plano
JavaScript trabaja con:
✅ objetos del DOM
Ejemplo:
form.id
form.elements
form.addEventListener()Lenguaje del código: CSS (css)
Todo eso son:
👉 propiedades y métodos de un objeto
Paso 2: Escuchar el evento submit
¿QUÉ ES EL EVENTO submit?
En el mundo de JavaScript, un evento es una señal de que «algo sucedió». El evento submit es la señal específica que emite el formulario (la etiqueta <form>) cuando el usuario intenta enviarlo.
NOTA! Muchos alumnos cometen el error de ponerle un evento click al botón de enviar. ¡Error! El evento correcto es el submit del formulario. ¿Por qué? Porque un formulario se puede enviar de muchas formas: haciendo clic en el botón, apretando «Enter» en un campo de texto, o mediante otro dispositivo de asistencia. Si escuchás el submit, cubrís todas las posibilidades.
EJEMPLO de su implementación:
Aquí tenés el código de cómo «escuchamos» ese momento:
// 1. Primero seleccionamos el formulario (como vimos antes)
const miFormulario = document.forms['registro'];
// 2. Aquí es donde implementamos y le decimos al formulario que "escuche" el evento submit
miFormulario.addEventListener('submit', function(event) {
// 3. Detenemos el envío automático (Paso siguiente)
event.preventDefault();
// 4. Tu lógica aquí
console.log("¡El usuario intentó enviar el formulario! Yo lo atrapé.");
});Lenguaje del código: JavaScript (javascript)
Explicación:
addEventListener('submit', ...):- Aquí es donde escuchanos al evento
submitusando addEventlistener, es como poner un guardia de seguridad en la puerta del formulario. Su único trabajo es esperar a que alguien intente «salir» (enviar los datos) para ejecutar una función.
- Aquí es donde escuchanos al evento
- La función de «Callback»:
- Es el bloque de código que se ejecuta solo cuando ocurre el envío. Notarás que recibe un parámetro llamado
event(o simplementee).
- Es el bloque de código que se ejecuta solo cuando ocurre el envío. Notarás que recibe un parámetro llamado
event:- El objeto event, es un objeto que contiene toda la información de lo que acaba de pasar: quién envió el formulario, a qué hora, en qué elemento se hizo clic, etc.
event.preventDefault()(es el paso siguiente):- Esta es la línea más importante del manejo de formularios. Por defecto, el navegador quiere enviar los datos y refrescar la página. Esta función le dice: «¡Pará! No recargues nada, yo me encargo de procesar esto con JavaScript».
Paso 3: Cancelar el envío automático con event.preventDefault()
Como ya dijimos, cuando ocurre el submit (cuando el usuario envía el formulario) el navegador automáticamente:
- Toma los datos del formulario
- Los envía al destino (
action) - Recarga la página
Eso ocurre aunque no tengas backend.
Es un comportamiento automático del HTML.
¿Por qué esto es un problema hoy?
Porque en aplicaciones modernas vos necesitás:
- Validar antes de enviar
- Mostrar errores sin recargar
- Enviar datos con
fetch - Dar mejor experiencia al usuario
Si la página se recarga, perdés el control.
Aquí es donde entra en juego event.preventDefault()
¿Qué hace event.preventDefault()?
Le dice al navegador: ❝ No hagas tu comportamiento automático. Ahora mando yo. ❞
Es literalmente cancelar la acción por defecto del submit.
Ejemplo SIN preventDefault()
HTML
<form id="contactForm">
<input type="text" name="name">
<button type="submit">Enviar</button>
</form>Lenguaje del código: HTML, XML (xml)
JS
const form = document.querySelector('#contactForm');
form.addEventListener('submit', (event) => {
console.log('Submit detectado');
});Lenguaje del código: JavaScript (javascript)
¿Qué pasa?
- Se ejecuta el console.log
- La página se recarga
- Perdés todo
Ejemplo CON preventDefault() (correcto)
const form = document.querySelector('#contactForm');
form.addEventListener('submit', (event) => {
event.preventDefault();
console.log('Ahora el formulario está bajo control de JS');
});Lenguaje del código: JavaScript (javascript)
¿Qué pasa ahora?
- Se dispara el submit
- Se cancela el envío automático
- La página NO se recarga
- Podés hacer lo que quieras con los datos
Paso 4: Leer los valores de los campos del formulario
¿QUÉ SIGNIFICA “leer los valores”?
Significa obtener desde JavaScript lo que el usuario escribió, seleccionó o marcó en cada campo del formulario.
Es decir, traer a JS:
- El texto escrito
- El email ingresado
- El checkbox marcado
- La opción seleccionada
Sin esto, no podés:
- Validar
- Mostrar errores
- Enviar datos
- Usar la información
¿Por qué es necesario?
Porque el formulario está en el HTML, pero los datos están dentro de los inputs.
JavaScript no adivina lo que el usuario escribió.
Tenés que decirle explícitamente: “Dame el valor de este campo”.
EJEMPLO:
HTML
<form id="contactForm">
<input type="text" id="name" name="name">
<input type="email" id="email" name="email">
<button type="submit">Enviar</button>
</form>Lenguaje del código: HTML, XML (xml)
JavaScript
const form = document.querySelector('#contactForm');
const nameInput = document.querySelector('#name');
const emailInput = document.querySelector('#email');
form.addEventListener('submit', (event) => {
event.preventDefault();
const name = nameInput.value;
const email = emailInput.value;
console.log(name, email);
});Lenguaje del código: JavaScript (javascript)
¿Cómo leemos los valores del formulario en este ejemplo?
Primero debemos entender esto (clave). Cuando el navegador carga el HTML:
<input type="text" id="name" name="name">Lenguaje del código: HTML, XML (xml)
Ese <input> deja de ser “HTML” y pasa a ser un OBJETO del DOM con propiedades.
Una de esas propiedades es:
.valueLenguaje del código: CSS (css)
Esa propiedad siempre contiene lo que el usuario escribe.
ACÁ ocurre la lectura real de los datos:
const name = nameInput.value;
const email = emailInput.value;Lenguaje del código: JavaScript (javascript)
Este es el punto más importante de todo.
¿Qué está pasando exactamente acá?
nameInputes el objeto del input.valuees la propiedad que guarda lo que el usuario escribió
Entonces JavaScript hace literalmente: “Andá al input, mirá qué tiene escrito adentro, y guardalo en una variable”.
Visualmente es esto
Usuario escribe:
Nombre: Manuel
Email: [email protected]Lenguaje del código: HTTP (http)
En memoria del DOM queda:
nameInput.value → "Manuel"
emailInput.value → "manuel@gmail.com"Lenguaje del código: CSS (css)
Y estas líneas lo copian a variables JS:
const name = "Manuel";
const email = "[email protected]";Lenguaje del código: JavaScript (javascript)
Comprobación final:
console.log(name, email);Lenguaje del código: JavaScript (javascript)
Esto muestra exactamente lo que JavaScript leyó del formulario.
¿Qué LOGRAMOS al leer los valores?
A partir de acá podés:
- ✅ Validar
if (name === '') {
console.log('El nombre está vacío');
}Lenguaje del código: JavaScript (javascript)
- ✅ Mostrar mensajes
- ✅ Enviar al servidor
- ✅ Usar los datos para lógica
IMPORTANTE: Cada tipo de campo se lee distinto
| Campo | Propiedad |
|---|---|
| text, email, password | .value |
| checkbox | .checked |
| radio | .checked |
| select | .value |
Ejemplo con checkbox:
const terms = form.elements.terms.checked;Lenguaje del código: JavaScript (javascript)
Idea clave que se nos debe grabar: «El usuario escribe en el HTML, pero JavaScript necesita leer esos datos desde el DOM.»
Paso 5: Validar datos del formulario con JavaScript
¿Qué significa “validar”?
Validar es comprobar que los datos ingresados por el usuario cumplen ciertas reglas antes de enviarlos.
Ejemplos de reglas:
- Que no esté vacío
- Que el email tenga formato válido
- Que la contraseña tenga cierta longitud
- Que un checkbox esté marcado
Validar = controlar la calidad de los datos.
¿Por qué es tan importante este paso?
Porque si no validás:
❌ Se envían datos vacíos
❌ Se envían emails mal escritos
❌ Se envían datos inútiles al servidor
❌ Mala experiencia de usuario
Con validación:
✅ Datos correctos
✅ Menos errores en el backend
✅ Mejor UX
✅ Más profesional
¿Cómo validar estos datos?
Validar no es solo decir «esto está mal», es guiar al usuario. Aquí tenés las 3 formas principales de hacerlo en JavaScript:
1. Validación lógica (La vieja confiable)
Es el uso de if/else básicos. Es ideal para reglas de negocio simples (ej: «la edad debe ser mayor a 18»).
- Propiedades:
.value,.length. - Técnica: Verificamos el valor y, si no cumple, lanzamos una alerta o cambiamos el DOM.
if (inputEdad.value < 18) {
console.error("No podés pasar, sos menor.");
// Aquí podrías pintar el borde del input de rojo con CSS
inputEdad.style.borderColor = "red";
}Lenguaje del código: JavaScript (javascript)
2. Constraint validation API (La forma moderna)
Los navegadores ya vienen con un sistema de validación increíble. En lugar de inventar la rueda, usamos sus métodos.
- Métodos clave:
checkValidity()(devuelve true/false),setCustomValidity()(define el mensaje),reportValidity()(muestra el globo de error). - Propiedad:
.validity(un objeto que te dice exactamente qué falló: si es muy corto, si no coincide el tipo, etc.).
const email = formulario.elements['correo'];
if (!email.checkValidity()) {
if (email.validity.typeMismatch) {
email.setCustomValidity("¡Che! Eso no parece un email.");
}
email.reportValidity();
}Lenguaje del código: JavaScript (javascript)
3. Expresiones regulares (RegEx)
Para validaciones complejas como «la contraseña debe tener una mayúscula, un número y un símbolo».
- Método:
regex.test(valor).
const regexPassword = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/; // Mínimo 8 caracteres, una letra y un número
if (!regexPassword.test(inputPass.value)) {
alert("Contraseña muy débil.");
}Lenguaje del código: JavaScript (javascript)
Ejemplo de validación:
Formulario HTML a validar:
<form id="form-acceso" name="registroAcceso">
<div>
<label for="nombre">Tu Nombre:</label>
<input type="text" id="nombre" name="usuario" placeholder="Ej: Messi">
</div>
<div>
<label for="edad">Tu Edad:</label>
<input type="number" id="edad" name="edadUsuario" placeholder="0">
</div>
<button type="submit">Entrar al Club</button>
<p id="mensaje-error" style="color: red;"></p>
</form>Lenguaje del código: HTML, XML (xml)
Explicación del HTML:
name="registroAcceso": Nuestra «manija» para agarrar el formulario desde JS.type="number": Ya le dice al navegador que solo acepte números.<p id="mensaje-error">: Un lugar vacío donde escribiremos los errores con JS.
JavaScript (La Lógica) para la validación:
// 1. Seleccionamos el formulario y el lugar del error
const formulario = document.forms['registroAcceso'];
const errorDisplay = document.getElementById('mensaje-error');
// 2. Escuchamos cuando el usuario intenta "entrar"
formulario.addEventListener('submit', function(event) {
// 3. Frenamos el envío para validar primero
event.preventDefault();
// 4. Limpiamos errores anteriores
errorDisplay.textContent = "";
// 5. Capturamos los valores
const nombre = formulario.elements['usuario'].value.trim();
const edad = parseInt(formulario.elements['edadUsuario'].value);
// --- LAS REGLAS DE VALIDACIÓN ---
// Regla 1: Que el nombre no sea puro espacio en blanco
if (nombre.length < 3) {
errorDisplay.textContent = "¡Ey! El nombre debe tener al menos 3 letras.";
return; // El 'return' corta la función aquí si hay error
}
// Regla 2: Que sea mayor de 18
if (isNaN(edad) || edad < 18) {
errorDisplay.textContent = "Lo siento, solo mayores de 18 años.";
return;
}
// --- SI LLEGAMOS ACÁ, TODO ESTÁ BIEN ---
alert(`¡Bienvenido ${nombre}! Pasá que te estábamos esperando.`);
// Aquí podrías enviar los datos a un servidor
console.log("Datos listos:", { nombre, edad });
});
Lenguaje del código: JavaScript (javascript)
Explicación de los puntos clave:
.trim():- Esta función es vital. Quita los espacios vacíos al principio y al final. Así evitamos que un usuario «tramposo» ponga tres espacios y el sistema crea que escribió un nombre.
parseInt():- Como los inputs siempre devuelven texto (String), lo convertimos a un número real para poder comparar si es mayor a 18.
- El
returnestratégico:- Fijate que después de poner un mensaje de error, escribo
return. Esto es como un «¡Alto!» para JavaScript; le dice que no siga ejecutando lo que está abajo (como el alert de bienvenida) porque la validación falló.
- Fijate que después de poner un mensaje de error, escribo
errorDisplay.textContent:- En lugar de usar un
alertmolesto que bloquea la pantalla, escribimos el error directamente en el HTML para una mejor experiencia.
- En lugar de usar un
Paso 6: Mostrar errores en el DOM (no con alert)
¿Por qué NO usar alert?
Porque alert:
- Bloquea la pantalla
- Es molesto
- No es visual ni claro
- No indica qué campo tiene el error
- No es accesible
- No se usa en aplicaciones modernas
Ningún login real usa alert.
¿Qué significa mostrar errores en el DOM?
Significa: «Crear o usar elementos HTML para mostrar mensajes de error dentro de la página, cerca del campo que tiene el problema.»
Esto mejora:
- UX (experiencia de usuario)
- Claridad
- Accesibilidad
- Diseño visual
Ejemplo de este paso:
El formulario HTML: Fijate que agregamos un <span> justo debajo del input. Este será nuestro lugar para hablarle al usuario.
<form id="form-login" name="login">
<div>
<label>Email:</label>
<input type="text" name="correo" id="emailInput">
<span id="error-email" style="color: red; display: block; font-size: 0.8em;"></span>
</div>
<button type="submit">Entrar</button>
</form>
Lenguaje del código: HTML, XML (xml)
JavaScript reflejando los errores en el DOM:
En lugar de disparar una ventana emergente, vamos a manipular la propiedad .textContent del <span>.
const formulario = document.forms['login'];
const mensajeError = document.getElementById('error-email');
formulario.addEventListener('submit', function(event) {
event.preventDefault();
// 1. Capturamos el valor
const email = formulario.elements['correo'].value;
// 2. Limpiamos el error anterior (para que no se quede pegado)
mensajeError.textContent = "";
// 3. Validación sencilla
if (email === "") {
// En lugar de alert, escribimos en el HTML
mensajeError.textContent = "¡Opa! Te olvidaste de poner el email.";
} else if (!email.includes("@")) {
mensajeError.textContent = "Eso no parece un email válido, le falta el @.";
} else {
// Si todo está bien
alert("¡Datos correctos! Enviando...");
}
});Lenguaje del código: JavaScript (javascript)
Explicación:
- El contenedor vacío:
- El
<span>con el IDerror-emailempieza vacío. El usuario no ve nada hasta que JavaScript decide que hay un error.
- El
textContent(Esta es la propiedad mágica):- Al usar
mensajeError.textContent = "...", estamos inyectando texto directamente dentro de la etiqueta HTML desde JavaScript.
- Al usar
- La «Limpieza» (
mensajeError.textContent = ""):- Esto es vital. Si el usuario corrige el error y vuelve a intentar, el mensaje viejo debe desaparecer. Por eso, lo primero que hacemos al empezar la validación es borrar cualquier mensaje previo.
- Feedback Visual:
- Al usar CSS (en el ejemplo puse un
stylerápido), el usuario identifica inmediatamente que algo anda mal por el color rojo, sin que una ventana molesta lo interrumpa.
- Al usar CSS (en el ejemplo puse un
Paso 7: Enviar datos:
¿QUÉ PASA UNA VEZ QUE HACEMOS CLIC EN ENVIAR EL FORMULARIO?
Aquí te explicamos conceptualmente este proceso sin profundizar demasiado en los aspectos técnicos como la comunicación del lado del servidor ni el manejo de formularios del lado del servidor.
1. El concepto: Cliente vs. Servidor
Hasta ahora, todo lo que hicimos sucede en el Cliente (la computadora o celular del usuario). Si el usuario refresca la página o cierra el navegador, los datos se pierden para siempre.
Para que los datos sean «reales» (que el usuario pueda iniciar sesión mañana o que el dueño del sitio vea el pedido), deben viajar a un Servidor.
- El Cliente (Vos): Prepara el paquete, lo limpia (validación) y lo envía.
- El Servidor (El mundo real): Recibe el paquete, lo procesa y lo guarda en una Base de Datos.
2. El proceso en el mundo real (Paso a paso)
Imaginá que estás registrando un nuevo usuario. El flujo profesional es este:
A. Envío desde el Navegador (La Petición)
Una vez que tu JS valida que todo está bien, usás una función llamada fetch. Esta función empaqueta los datos (generalmente en un formato llamado JSON) y los manda a una dirección de internet (URL) llamada API o Endpoint.
B. El «Doble Chequeo» (Validación de Servidor)
Esto te va a sorprender: El servidor vuelve a validar todo.
Regla de oro: Nunca te fíes de la validación del cliente. Un programador malintencionado podría saltarse tu JavaScript. El servidor debe verificar otra vez que el email sea válido y el nombre no esté vacío antes de tocar la base de datos.
C. El Almacenamiento (Base de Datos)
Si todo está OK, el servidor escribe esos datos en un disco duro especial (la Base de Datos, como PostgreSQL o MongoDB). A partir de este segundo, el dato es persistente.
D. La Respuesta
El servidor te manda una «cartita» de vuelta al navegador que dice:
200 OK: «¡Listo, guardé todo perfecto!»400 Error: «Che, me mandaste algo mal.»500 Error: «Se me rompió algo acá adentro, intentá después.»
3. ¿Cómo se ve esto en código «real»?
Fijate cómo conectamos tu validación con el envío real:
formulario.addEventListener('submit', async (e) => {
e.preventDefault();
// 1. TU VALIDACIÓN (Lo que ya aprendiste)
if (nombre.value === "") return;
// 2. EL ENVÍO REAL (El puente al mundo real)
const respuesta = await fetch('https://api.tu-sitio.com/usuarios', {
method: 'POST',
body: JSON.stringify({ nombre: nombre.value }),
headers: { 'Content-Type': 'application/json' }
});
// 3. LA RESPUESTA
const resultado = await respuesta.json();
console.log("El servidor dice:", resultado);
});Lenguaje del código: JavaScript (javascript)
EXPLICACIÓN:
- El inicio:
async (e) => { ... }(e): Es el objeto del evento (el intento de envío).async: Esta palabra clave es vital. Le dice a JavaScript: «Preparate, porque adentro de esta función vamos a hacer algo que va a tardar (como llamar a un servidor), y no quiero que congeles el resto de la página mientras esperás».
- El freno de mano:
e.preventDefault();- Como ya vimos, los formularios por defecto intentan recargar la página. Esta línea cancela ese comportamiento. Sin esto, el resto del código no llegaría a ejecutarse porque la página se refrescaría antes.
- La validación:
if (nombre.value === "") return;- Es el «filtro de calidad». Si el campo está vacío, el
returnhace que la función se termine ahí mismo. Es como un guardia que dice: «Si no traés el documento, no pasás al siguiente paso (el envío)».
- Es el «filtro de calidad». Si el campo está vacío, el
- El envío:
fetch('URL', { ... })fetches la herramienta nativa para hacer peticiones a internet. Es como enviar una carta. El primer parámetro es la dirección (URL) y el segundo es un objeto con las instrucciones:method: 'POST': Le avisamos al servidor que no solo estamos mirando, sino que le estamos enviando información nueva (un «posteo»).body: JSON.stringify({ nombre: nombre.value }): Los servidores no entienden objetos de JavaScript directamente.JSON.stringifyactúa como un traductor: convierte tu objeto{ nombre: "Juan" }en una cadena de texto que el servidor puede leer.headers: { 'Content-Type': 'application/json' }: Es como la etiqueta de una caja. Le indica al servidor: «Ojo, lo que hay adentro de este paquete es un archivo de tipo JSON».
- La espera:
await- Fijate que dice
const respuesta = await fetch(...). La palabraawaitle dice a JavaScript: «Esperá a que el servidor nos conteste antes de seguir a la siguiente línea». Gracias alasyncdel principio, el navegador puede esperar sin «trabarse».
- Fijate que dice
- La respuesta:
const resultado = await respuesta.json();- Cuando el servidor contesta, nos manda mucha información técnica (cabeceras, estado, etc.). Para ver el mensaje real que nos envió (ej: «Usuario creado»), tenemos que usar
.json(), que vuelve a traducir ese texto aburrido del servidor a un objeto de JavaScript que podemos usar.
- Cuando el servidor contesta, nos manda mucha información técnica (cabeceras, estado, etc.). Para ver el mensaje real que nos envió (ej: «Usuario creado»), tenemos que usar
Paso 8: Limpiar el formulario
¿Qué significa “limpiar el formulario”?
Significa devolver todos los campos a su estado inicial después de un envío exitoso.
Es decir:
- Vaciar inputs
- Quitar mensajes de error
- Quitar mensajes de éxito
- Dejar el formulario “como recién cargado”
¿Por qué es tan importante?
Porque si no lo hacés:
- Los datos quedan visibles
- El usuario no sabe si ya se envió
- El formulario queda en un estado confuso
- Se rompe la experiencia de usuario
Un formulario profesional siempre se resetea después de enviarse correctamente.
¿Cómo limpiar el formulario? form.reset()
HTML ya tiene esto resuelto de fábrica.
form.reset();Lenguaje del código: CSS (css)
Este método: «Devuelve todos los campos al valor que tenían cuando cargó la página.»
Ejemplo completo dentro del flujo real:
form.addEventListener('submit', (event) => {
event.preventDefault();
const name = form.elements.name.value.trim();
const email = form.elements.email.value.trim();
error.textContent = '';
success.textContent = '';
if (name === '' || email === '') {
error.textContent = 'Todos los campos son obligatorios';
return;
}
// 👉 Simulación de envío
console.log({ name, email });
success.textContent = 'Formulario enviado correctamente ✅';
// 👉 PASO 8: limpiar formulario
form.reset();
});
Lenguaje del código: JavaScript (javascript)
¿Qué limpia exactamente reset()?
| Elemento | Qué hace reset() |
|---|---|
| input text | Lo vacía |
| input email | Lo vacía |
| checkbox | Vuelve a su estado inicial |
| radio | Vuelve a su estado inicial |
| select | Vuelve a la opción inicial |
| textarea | La vacía |
