0Pricing
HTML Academy · Lección

reportValidity y setCustomValidity

Active la interfaz de validación del navegador y establezca mensajes de error personalizados

reportValidity y setCustomValidity es una lección gratuita de HTML Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de HTML Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de HTML Academy incluye 4 lecciones en total.

Dos API para la experiencia de usuario nativa

La Constraint Validation API expone dos métodos que controlan la interfaz de validación integrada del navegador: reportValidity (mostrar la información emergente) y setCustomValidity (proporcionar un mensaje de error personalizado). Juntos permiten personalizar los mensajes y conservar la presentación nativa.

reportValidity frente a checkValidity

checkValidity() devuelve true/false de forma silenciosa, sin efectos secundarios en la interfaz. reportValidity() realiza la misma comprobación, pero además enfoca el primer campo no válido y muestra la información emergente de validación del navegador. Elija reportValidity cuando quiera obtener la experiencia de usuario nativa sin esfuerzo.

document.forms.signup.addEventListener("submit", (e) => {
  if (!e.target.reportValidity()) {
    e.preventDefault();
    // browser already focused first invalid field and showed tooltip
  }
});

Validación programática

En los asistentes de varios pasos, valide los campos de cada paso antes de avanzar: if (step.reportValidity()) { next(); }. El navegador se encarga de mostrar el error y enfoca el campo que requiere atención, lo que evita que tenga que volver a implementar la gestión del foco.

setCustomValidity reemplaza los mensajes

Es posible que los mensajes predeterminados ("Complete este campo") no coincidan con su tono. input.setCustomValidity("Username is required") reemplaza el mensaje predeterminado por su texto. El campo se considera no válido hasta que borre el mensaje.

Borrar mensajes personalizados

input.setCustomValidity("") elimina el mensaje personalizado y vuelve a activar la validación normal. Llámelo cada vez que vuelva a validar; de lo contrario, los mensajes personalizados obsoletos permanecerán aunque el usuario haya solucionado el problema.

input.addEventListener("input", () => {
  if (input.value.length < 3) {
    input.setCustomValidity("Must be at least 3 characters");
  } else {
    input.setCustomValidity("");
  }
});

Validación asíncrona

Para comprobaciones del lado del servidor (disponibilidad de nombres de usuario, validez de cupones), use setCustomValidity después de recibir la respuesta asíncrona: const ok = await checkUsername(value); input.setCustomValidity(ok ? "" : "Already taken");. El navegador recoge inmediatamente el nuevo estado de validez.

Combinar con una interfaz de errores personalizada

Para utilizar su propia presentación de errores y conservar el seguimiento de la validez, escuche el evento invalid y llame a e.preventDefault() para suprimir la información emergente nativa: input.addEventListener("invalid", (e) => { e.preventDefault(); showError(input, input.validationMessage); }).

Varias restricciones personalizadas

setCustomValidity solo admite un mensaje personalizado a la vez. Para aplicar varias reglas, compruebe cada una y llame a setCustomValidity con el mensaje más relevante según un orden de prioridad. Se mostrará la primera regla que falle.

No duplique la validación integrada

Si establece un mensaje personalizado para un campo required vacío, su mensaje puede entrar en conflicto con el mensaje predeterminado. Elija un solo enfoque para cada campo: desactive la restricción integrada (use type="text" en lugar de type="email" y valide mediante setCustomValidity) o confíe completamente en la validación integrada.

Validación personalizada a nivel de formulario

Para validar varios campos relacionados (por ejemplo, que coincidan las contraseñas), aplique setCustomValidity al campo relacionado: confirmInput.setCustomValidity(confirmInput.value === passInput.value ? "" : "Passwords do not match"). El formulario no será válido hasta que ambos valores coincidan.

Internacionalización

El navegador localiza los mensajes integrados según el idioma del usuario. Los mensajes personalizados establecidos mediante setCustomValidity deben estar en el idioma correcto; lea navigator.language o su propio estado de i18n y proporcione la traducción correspondiente.

Pruebas

Abra DevTools y pruebe todas las rutas no válidas: envío vacío, entrada parcial, formato incorrecto y fallo asíncrono. Verifique que se muestre el mensaje correcto, que al solucionar el problema este desaparezca y que el envío de un formulario válido continúe. Los casos límite (pegar un formato no válido y el autocompletado del navegador) requieren pruebas específicas.

Comprobación de conocimientos

Después de llamar a input.setCustomValidity("Already taken"), ¿cómo indica al navegador que el campo vuelve a ser válido?

Resumen

reportValidity activa la interfaz de validación integrada del navegador (foco e información emergente), por lo que resulta perfecta para las comprobaciones programáticas. setCustomValidity reemplaza los mensajes predeterminados por su texto; bórrelo con una cadena vacía cuando el campo vuelva a ser válido. Escuche el evento invalid y use preventDefault para mostrar errores completamente personalizados. Utilícelo para validaciones entre campos, comprobaciones asíncronas y mensajes personalizados localizados.

Preguntas frecuentes

¿La lección «reportValidity y setCustomValidity» es gratis?

Sí — el texto completo de «reportValidity y setCustomValidity» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de HTML Academy, actualiza a CoddyKit PRO. El curso de HTML Academy incluye 4 lecciones en total.

¿Qué aprenderé en «reportValidity y setCustomValidity»?

Active la interfaz de validación del navegador y establezca mensajes de error personalizados Practicas HTML Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar HTML Academy?

No se requiere experiencia previa. HTML Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «reportValidity y setCustomValidity»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de HTML Academy?

Sí. Cada lección de HTML Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. La API FormData
  2. La Constraint Validation API
  3. reportValidity y setCustomValidity
  4. Eventos de restablecimiento de formularios y gestión del estado
← Volver a HTML Academy