Tengo un formulario con varios campos que estoy validando (algunos con métodos agregados para la validación personalizada) con el excelente complemento de validación jQuery de Jörn Zaeffere. ¿Cómo se evita la validación con controles de envío específicos (en otras palabras, se activa la validación con algunas entradas de envío, pero no se activa la validación con otras)? Esto sería similar a ValidationGroups con controles de validación ASP.NET estándar.
Mi situación:
Es con ASP.NET WebForms, pero puede ignorarlo si lo desea. Sin embargo, estoy usando la validación más como una "recomendación": en otras palabras, cuando se envía el formulario, la validación se dispara pero en lugar de mostrar un mensaje "obligatorio", una "recomendación" muestra que dice algo como "usted" omitió los siguientes campos ... ¿desea continuar de todos modos? " En ese punto en el contenedor de errores, ahora hay otro botón de envío visible que se puede presionar, lo que ignoraría la validación y el envío de todos modos. ¿Cómo eludir los formularios .validate () para este control de botón y aún publicar?
La muestra Comprar y vender una casa en http://jquery.bassistance.de/validate/demo/multipart/ permite esto para acceder a los enlaces anteriores, pero lo hace mediante la creación de métodos personalizados y agregándolo al validador. Preferiría no tener que crear métodos personalizados que dupliquen la funcionalidad ya en el complemento de validación.
La siguiente es una versión abreviada del script inmediatamente aplicable que tengo ahora:
var container = $("#<%= Form.ClientID %> div.validationSuggestion");
$('#<%= Form.ClientID %>').validate({
errorContainer: container,
errorLabelContainer: $("ul",container),
rules: {
<%= YesNo.UniqueID %>: { required: true },
<%= ShortText.UniqueID %>: { required: true } // etc.
},
messages: {
<%= YesNo.UniqueID %>: 'A message.',
<%= ShortText.UniqueID %>: 'Another message.' // etc.
},
highlight: function(element, errorClass) {
$(element).addClass(errorClass);
$(element.form).find("label[for=" + element.id + "]").addClass(errorClass);
$(element.form).find("label[for=" + element.id + "]").removeClass("valid");
},
unhighlight: function(element, errorClass) {
$(element).removeClass(errorClass);
$(element.form).find("label[for=" + element.id + "]").removeClass(errorClass);
$(element.form).find("label[for=" + element.id + "]").addClass("valid");
},
wrapper: 'li'
});
Respuestas:
Puede agregar una clase CSS de
cancel
un botón de envío para suprimir la validaciónp.ej
Consulte la documentación de jQuery Validator de esta función aquí: omitir la validación al enviar
EDITAR :
La técnica anterior ha quedado obsoleta y reemplazada por el
formnovalidate
atributo.fuente
$('input[type=submit]').addClass('cancel')
, la clase debe estar presente en la carga de la página.Otra forma (indocumentada) de hacerlo es llamar:
en el evento de clic del botón (por ejemplo).
fuente
$("form").validate().cancelSubmit = true;
. Intenté$("form").validate().cancelSubmit = false;
y llamé$("form").validate();
al envío de mi botón de envío. Gracias$(yourForm).data('validator').cancelSubmit = false;
graciasOtra forma (dinámica) más:
Y para volver a habilitarlo, simplemente restablecemos el valor predeterminado:
Fuente: https://github.com/jzaefferer/jquery-validation/issues/725#issuecomment-17601443
fuente
Agregar atributo formnovalidate a la entrada
Agregar class = "cancel" ahora está en desuso
Vea los documentos para omitir la validación al enviar en este enlace
fuente
Puede usar la opción onsubmit: false (consulte la documentación ) cuando realice la validación que no se validará al enviar el formulario. Y luego, en su botón asp: agregue un OnClientClick = $ ('# aspnetForm'). Valid (); para verificar explícitamente si el formulario es válido.
Podría llamar a esto el modelo de aceptación, en lugar de la opción de exclusión descrita anteriormente.
Tenga en cuenta que también estoy usando la validación de jquery con ASP.NET WebForms. Hay algunos problemas para navegar, pero una vez que los supera, la experiencia del usuario es muy buena.
fuente
(Extensión de
@lepe
's y@redsquare
respuesta paraASP.NET MVC
+jquery.validate.unobtrusive.js
)El complemento de validación jquery (no el discreto de Microsoft) le permite poner una
.cancel
clase en su botón de envío para omitir la validación por completo (como se muestra en la respuesta aceptada).(no confunda esto con
type='reset'
que es algo completamente diferente)Desafortunadamente, el
jquery.validation.unobtrusive.js
código de manejo de validación (ASP.NET MVC) arruina el comportamiento predeterminado del complemento jquery.validate .Esto es lo que se me ocurrió para permitirle poner
.cancel
el botón de enviar como se muestra arriba. Si Microsoft alguna vez 'arregla' esto, entonces solo puede eliminar este código.Nota: Si al primer intento parece que esto no está funcionando, asegúrese de que no esté dando una vuelta al servidor y que vea una página generada por el servidor con errores. Deberá omitir la validación en el lado del servidor por algún otro medio: esto solo permite que el formulario se envíe al lado del cliente sin errores (la alternativa sería agregar
.ignore
atributos a todo en su formulario).(Nota: es posible que deba agregar
button
al selector si está usando botones para enviar)fuente
Pay with PayPal
botón de envío$(this).closest('form').data("validator", null).unbind().submit();
Esto configurará el validador en nulo y lo desasociará. Después de eso, enviará el formulario. Puede restablecer la validación por esta línea:$.validator.unobtrusive.parse($("#YourUniqueFormId"));
.cancel
clase. NOTA: Si está usando un = 'imagen' de tipo botón de envío a continuación, la.cancel
clase no funcionará a menos que cambie":submit"
a":submit,:image"
en el plugin de jQuery original de validaciónO
Pero sin éxito en un validador personalizado requerido. Para llamar a un envío dinámicamente, he creado un botón de envío oculto falso con este código:
Ahora omita la validación correctamente :)
fuente
$("form").validate().settings.ignore = "class-name";
Esta pregunta es antigua, pero encontré otra forma de usarla
$('#formId')[0].submit()
, que obtiene el elemento dom en lugar del objeto jQuery, evitando cualquier gancho de validación. Este botón envía el formulario principal que contiene la entrada.Además, asegúrese de no tener ninguno
input
llamado "submit", o anula la función nombradasubmit
.fuente
Descubrí que la forma más flexible es usar JQuery:
Por ejemplo, si en lugar de enviar quiero redirigir, puedo hacer:
o puedo enviar los datos a un punto final diferente (por ejemplo, si quiero cambiar la acción):
Una vez que hagas 'event.preventDefault ();' omite la validación.
fuente
Tengo dos botones para enviar formularios, el botón llamado guardar y salir omite la validación:
fuente
Aquí está la versión más simple, espero que ayude a alguien,
fuente
también trabajando
fuente