Tengo un formulario con varios conjuntos de campos diferentes. Tengo algo de Javascript que muestra los conjuntos de campos a los usuarios uno a la vez. Para los navegadores que admiten la validación de HTML5, me encantaría utilizarlo. Sin embargo, necesito hacerlo en mis términos. Estoy usando JQuery.
Cuando un usuario hace clic en un enlace JS para pasar al siguiente conjunto de campos, necesito que la validación se realice en el conjunto de campos actual y bloquee al usuario para que no avance si hay problemas.
Idealmente, cuando el usuario pierde el foco en un elemento, se producirá la validación.
Actualmente no se ha validado el uso de Javascript. Preferiría utilizar el método nativo. :)
fuente
$('<input type="submit">').hide().appendTo($myForm).click().remove();
form.submit()
trabajo? ¿O HTML5 requiere un botón de envío para la validación ahora?.submit()
no funciona para mí. La solución de @ philfreo funciona. Hmm.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:
Y tomemos nuestros elementos de la interfaz de usuario en JavaScript:
¿No necesita compatibilidad con navegadores heredados como Internet Explorer? Esto es para ti.
Todos los navegadores modernos admiten el
reportValidity()
método enform
elementos.Eso es todo, hemos terminado. Además, aquí hay un CodePen simple que usa este enfoque.
Enfoque para navegadores más antiguos
Donde
reportValidity()
no es compatible, necesitamos engañar un poco al navegador. ¿Entonces que haremos?form.checkValidity()
. Esto nos dirá si el formulario es válido, pero no mostrará la IU de validación.En codigo:
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.
fuente
¡Hasta cierto punto, PUEDE la
trigger
validación de formularios HTML5 y mostrar sugerencias al usuario sin enviar el formulario!Dos botones, uno para validar, otro para enviar
Establezca un
onclick
oyente en el botón de validación para establecer una bandera global (por ejemplojustValidate
) para indicar que este clic está destinado a verificar la validación del formulario.Y establezca un
onclick
oyente en el botón enviar para establecer lajustValidate
bandera en falso.Luego, en el
onsubmit
controlador del formulario, verifica la banderajustValidate
para decidir el valor devuelto e invoca elpreventDefault()
para detener el envío del formulario. Como sabe, la validación del formulario HTML5 (y la sugerencia de la GUI para el usuario) se realiza antes delonsubmit
evento, e incluso si el formulario es VÁLIDO, puede detener el envío del formulario devolviendo falso o invocandopreventDefault()
.Y, en HTML5 tienes un método para verificar la validación del formulario: el
form.checkValidity()
, luego puedes saber si el formulario está validado o no en tu código.Bien, aquí está la demostración: http://jsbin.com/buvuku/2/edit
fuente
No estoy seguro de que valga la pena para mí escribir todo esto desde cero, ya que este artículo publicado en A List Apart hace un buen trabajo al explicarlo. MDN también tiene una guía práctica para formularios HTML5 y validación (que cubre la API y también el CSS relacionado).
fuente
Algo fácil de hacer para agregar o eliminar la validación HTML5 a los conjuntos de campos.
fuente
Parece que encuentro el truco: simplemente elimine el
target
atributo de formulario , luego use un botón de envío para validar el formulario y mostrar sugerencias, verifique si el formulario es válido a través de JavaScript y luego publique lo que sea. El siguiente código funciona para mí:fuente
Código HTML:
javascript (usando Jquery):
Espero que esto te ayudará
fuente
fuente
Cuando hay un proceso de validación muy complejo (especialmente asincrónico), existe una solución simple:
fuente
Otra forma de resolver este problema:
fuente
Uncaught TypeError: $(...).oninvalid is not a function
y no lo veo en los documentos de jQuery.