Razenha
Tengo este formulario en mi aplicación y lo enviaré a través de AJAX, pero quiero usar HTML para la validación del lado del cliente. Entonces quiero poder forzar la validación del formulario, quizás a través de jQuery.
Quiero activar la validación sin enviar el formulario. ¿Es posible?
Abrahán
Para comprobar si un determinado campo es válido, utilice:
$('#myField')[0].checkValidity(); // returns true|false
Para comprobar si el formulario es válido, utilice:
$('#myForm')[0].checkValidity(); // returns true|false
Mostrar error integrado de html5
if (! $('#myForm')[0].checkValidity()) {
$('#myForm')[0].reportValidity()
}
Tenga en cuenta que, hasta ahora, la validación de HTML5 no es compatible con todos los navegadores.
-
Intenta reemplazar
$myForm.submit()
con$myForm.find(':submit').click()
– Abrahán
1 de diciembre de 2012 a las 17:18
-
Abrahán tiene razón. Tienes que hacer clic en el botón Enviar (programadamente). Llamar a $myForm.submit() no activará la validación.
-Kevin Tighe
27 de marzo de 2013 a las 18:06
-
Si su formulario no tiene un botón de envío, puede falsificar uno:
$('<input type="submit">').hide().appendTo($myForm).click().remove();
– Philfreo
7 de noviembre de 2014 a las 22:14
-
Esta respuesta es muy útil debido a la sugerencia sobre
checkValidity()
pero también tiene un error peligroso.checkValidity()
es lo que activa los mensajes de error del navegador nativo, no el clic del botón Enviar. Si tiene un detector de eventos que escucha cuando se hace clic en el botón de envío, lo activará cuando haga ` $myForm.find(‘:submit’).click()`, que se activará solo y provocará una recurrencia infinita.– Solicitud incorrecta
28 de enero de 2015 a las 18:02
-
use .reportValidity(); para mostrar mensajes de error nativos del navegador sin enviar el formulario
– Marco Marsala
15 de abril de 2020 a las 18:38
Boopathi.Indotnet
el siguiente código funciona para mí,
$("#btn").click(function () {
if ($("#frm")[0].checkValidity())
alert('sucess');
else
//Validate Form
$("#frm")[0].reportValidity()
});
-
reportValidity()
es la mejor función para resaltar los campos obligatorios.– Jamshad Ahmad
31 de diciembre de 2019 a las 7:26
-
Sí, esto funciona de maravilla, pero solo si el navegador lo admite. caniuse.com/#search=reportValidez
– Mate
31 de enero de 2020 a las 21:28
-
¿Por qué no solo .reportValidity()? También comprobará la validez y devolverá verdadero/falso.
– Przemyslaw Niemiec
28 de diciembre de 2020 a las 12:33
Martín Christensen
Encontré esta solución para trabajar para mí. Simplemente llame a una función de javascript como esta:
action="javascript:myFunction();"
Luego tienes la validación html5… realmente simple 🙂
-
Esto funcionó para mí también y creo que esta es la mejor respuesta. lo puse
action="javascript:0"
sobre el<form>
y atadoclick
evento en el<button>
aMyFunction()
y todo funcionó muy bien. Mantengo todo JS fuera de HTML.MyFunction
entonces puede probarform.checkValidity()
continuar.– orad
16/10/2013 a las 19:20
-
El código de muestra siempre es útil.
– BJ Patel
19/03/2016 a las 17:35
-
Enlace al formulario
onsubmit()
casi siempre es mejor que vincular a un botónonclick()
, ya que hay otras formas de enviar un formulario. (Sobre todo al golpear elreturn
llave.)– etiqueta alternativa
11 de abril de 2016 a las 17:59
-
+1 Esto es increíble. no más validación del método javascript si el campo está vacío o si es un correo electrónico. ¡El navegador puede hacerlo por nosotros! ¿Es compatible con varios navegadores?
– José.
15 de junio de 2016 a las 9:42
-
Ni
action="javascript:myFunction();"
oaction="javascript:0"
funciona más en la última versión de Firefox (67). Sin embargo, funciona en Chrome.– Bobz
14 de julio de 2019 a las 3:08
if $("form")[0].checkValidity()
$.ajax(
url: "url"
type: "post"
data: {
}
dataType: "json"
success: (data) ->
)
else
#important
$("form")[0].reportValidity()
Samuel Gfeller
Solución JS vainilla 2022
Pure JavaScript tiene todas las funciones que necesita para esto. Sé que la pregunta era sobre jQuery, pero incluso las respuestas con jQuery usan estas funciones, que son checkValidity()
y reportValidity()
.
Probar todo el formulario
let form = document.getElementById('formId');
// Eventlistener can be another event and on another DOM object this is just an example
form.addEventListener('submit', function (event) {
// Only needed if event is submit, otherwise this line can be skipped
event.preventDefault();
// This is the important part, test if form is valid
if (form.checkValidity() === false){
// This is the magic function that displays the validation errors to the user
form.reportValidity();
return;
}
// Code if all fields are valid; continue form submit or make Ajax call.
})
Probar campo específico
checkValidity()
y reportValidity()
no solo se puede usar en el formulario, sino también en campos específicos. No es necesario crear un formulario o un botón de envío ficticio si no es necesario.
// Get field of interest
let inputElement = document.querySelector("[name="" + inputName + ""]");
// Check if the element is valid
if (inputElement.checkValidity() === false){
// If not, show the errors to the user
inputElement.reportValidity();
return;
}
// Nothing? Great, continue to the Ajax call or whatever
Esto tiene que estar en una función llamada por un detector de eventos para que tenga sentido, obviamente.
-
si tienes jQuery
$("#myform")
entonces te vas$("#myform")[0].checkValidity()
– Fanky
22 de febrero de 2022 a las 16:14
-
Esta es la mejor respuesta en esta página jajaja jQuery L – vainilla JS hasta el final.
– devon t
6 de junio de 2022 a las 15:47
Aquí hay una forma más general que es un poco más limpia:
Cree su formulario de esta manera (puede ser un formulario ficticio que no hace nada):
<form class="validateDontSubmit">
...
Enlaza todos los formularios que realmente no quieras enviar:
$(document).on('submit','.validateDontSubmit',function (e) {
//prevent the form from doing a submit
e.preventDefault();
return false;
})
Ahora digamos que tienes un <a>
(dentro de <form>
) que al hacer clic quiere validar el formulario:
$('#myLink').click(function(e){
//Leverage the HTML5 validation w/ ajax. Have to submit to get em. Wont actually submit cuz form
//has .validateDontSubmit class
var $theForm = $(this).closest('form');
//Some browsers don't implement checkValidity
if (( typeof($theForm[0].checkValidity) == "function" ) && !$theForm[0].checkValidity()) {
return;
}
//if you've gotten here - play on playa'
});
Algunas notas aquí:
- Me di cuenta de que no es necesario que envíe el formulario para que se produzca la validación: la llamada a
checkValidity()
es suficiente (al menos en cromo). Si otros pudieran agregar comentarios probando esta teoría en otros navegadores, actualizaré esta respuesta. - Lo que desencadena la validación no tiene que estar dentro del
<form>
. Esta fue solo una forma limpia y flexible de tener una solución de uso general.
-
si tienes jQuery
$("#myform")
entonces te vas$("#myform")[0].checkValidity()
– Fanky
22 de febrero de 2022 a las 16:14
-
Esta es la mejor respuesta en esta página jajaja jQuery L – vainilla JS hasta el final.
– devon t
6 de junio de 2022 a las 15:47
vzr
Puede que llegue tarde a la fiesta, pero de alguna manera encontré esta pregunta mientras intentaba resolver un problema similar. Como ningún código de esta página funcionó para mí, mientras tanto, encontré una solución que funciona como se especifica.
El problema es cuando tu <form>
DOM contiene solo <button>
elemento, una vez disparado, que <button>
enviará automáticamente el formulario. Si juegas con AJAX, probablemente necesites evitar la acción predeterminada. Pero hay una trampa: si solo lo hace, también evitará la validación básica de HTML5. Por lo tanto, es una buena idea evitar valores predeterminados en ese botón solo si el formulario es válido. De lo contrario, la validación de HTML5 lo protegerá de enviar. jQuery checkValidity()
ayudará con esto:
jQuery:
$(document).ready(function() {
$('#buttonID').on('click', function(event) {
var isvalidate = $("#formID")[0].checkValidity();
if (isvalidate) {
event.preventDefault();
// HERE YOU CAN PUT YOUR AJAX CALL
}
});
});
El código descrito anteriormente le permitirá utilizar la validación HTML5 básica (con coincidencia de tipo y patrón) SIN enviar el formulario.
¿Puede especificar en qué momento desea validar el formulario? ¿Qué desencadena la validación? ¿Desea validar cada campo cuando el usuario escribe, ingresa/abandona el campo, cambia el valor?
-Peter Pajchl
8 de agosto de 2012 a las 21:12
Me gustaría poder hacer algo así: $(“#my_form”).triggerHtml5Validation()
– razenha
8 de agosto de 2012 a las 21:29
Esta página podría ayudar enlace
– Dan Bray
19 de marzo de 2016 a las 16:24