TL; DR: ¿ No te preocupas por los navegadores antiguos? Utilice form.reportValidity()
.
¿Necesita compatibilidad con navegadores heredados? Sigue leyendo.
De hecho, es posible activar la validación manualmente.
Usaré JavaScript simple en mi respuesta para mejorar la reutilización, no se necesita jQuery.
Asuma el siguiente formulario HTML:
<form>
<input required>
<button type="button">Trigger validation</button>
</form>
Y tomemos nuestros elementos de la interfaz de usuario en JavaScript:
var form = document.querySelector('form')
var triggerButton = document.querySelector('button')
¿No necesita compatibilidad con navegadores heredados como Internet Explorer? Esto es para ti.
Todos los navegadores modernos admiten el reportValidity()
método en form
elementos.
triggerButton.onclick = function () {
form.reportValidity()
}
Eso es todo, hemos terminado. Además, aquí hay un CodePen simple que usa este enfoque.
Enfoque para navegadores más antiguos
A continuación se muestra una explicación detallada de cómo reportValidity()
se puede emular en navegadores más antiguos.
Sin embargo, no es necesario que copie y pegue esos bloques de código en su proyecto usted mismo; hay un ponyfill / polyfill disponible para usted.
Donde reportValidity()
no es compatible, necesitamos engañar un poco al navegador. ¿Entonces que haremos?
- Compruebe la validez del formulario llamando
form.checkValidity()
. Esto nos dirá si el formulario es válido, pero no mostrará la IU de validación.
- Si el formulario no es válido, creamos un botón de envío temporal y hacemos clic en él. Dado que el formulario no es válido, sabemos que en realidad no se enviará , sin embargo, mostrará sugerencias de validación al usuario. Eliminaremos el botón de envío temporal de inmediato, por lo que nunca será visible para el usuario.
- Si el formulario es válido, no necesitamos interferir en absoluto y dejar que el usuario continúe.
En codigo:
triggerButton.onclick = function () {
// Form is invalid!
if (!form.checkValidity()) {
// Create the temporary button, click and remove it
var tmpSubmit = document.createElement('button')
form.appendChild(tmpSubmit)
tmpSubmit.click()
form.removeChild(tmpSubmit)
} else {
// Form is valid, let the user proceed or do whatever we need to
}
}
Este código funcionará en prácticamente cualquier navegador común (lo he probado con éxito hasta IE11).
Aquí hay un ejemplo de CodePen funcional.