2008-12-12 15 views
37

Estoy usando el complemento de validación jQuery para validar un formulario, y me gustaría eliminar la validación y enviar el formulario si se hace clic en un determinado enlace.¿Cómo elimino la validación de jQuery de un formulario?

Estoy enviando formulario con javascript como jQuery('form#listing').submit(), por lo que debo eliminar las reglas/funciones de validación con javascript.

El problema es que no puedo encontrar la manera de hacerlo. He intentado cosas como jQuery('form#listing').validate({}); y jQuery('form#listing').validate = null, pero sin suerte.

Respuesta

66

Gatillo el DOM presentar método para omitir la validación:

$("#listing")[0].submit(); 
+0

guau, eso fue increíblemente útil y simple. ¡Gracias! –

+0

Eso es un gran consejo. Gracias. – kolrie

+7

De hecho, es un gran consejo, pero no responde la pregunta. – biphobe

7

Puede agregar una clase css de cancelar a un elemento (botón, de entrada) para que se salta la validación

+0

que estoy presentando el formulario con javascript, así que por desgracia que no funciona. – Ben

+0

Afortunadamente, no estoy haciendo nada complicado, así que esto funcionó para mí. Gracias. – uriDium

+0

también se puede usar el atributo html5 formnovalidate en el elemento enviar – Luiz

34

Puede eliminar eventos de nodos con unbind:

jQuery('form#listing').unbind('submit'); // remove all submit handlers of the form 

lo que usted está probablemente buscando es que el plugin de validación también puede anular la asignación del evento en sí presentar:

jQuery('form#listing').validate({ 
    onsubmit : false 
}); 

para ambos debe ser capaz de hacer un seguimiento con una llamada a .submit() para enviar el formulario:

jQuery('form#listing').unbind('submit').submit(); 
+3

Solo el método de desvinculación funcionó para mí. Usando jQuery 1.3.2 y Validate 1.5.5 – JavadocMD

+0

para mí también, solo desvinculación encadenada trabajó –

2

Recientemente he actualizado a 1.5.5 de la escritura validador de Jörn y la función removeValidator ha sido obsoleto.


... 
jQuery.extend(
      jQuery.fn, 
      { 
      removeValidator: function(){ 
       this.unbind(); 
       jQuery.removeData(this[0], 'validator'); 
      } 
... 
5

Esto parece funcionar para mí ahora:

var form = $('#my_form_id').get(0); 
$(form).removeData('validate'); 
+0

meh. Ahora estoy usando el método mencionado por Jorn arriba. Puedo utilizar esto cuando quiero omitir la validación:

 \t bypassValidator = function(){ \t \t $("#btn-submit").bind('click', function(){ \t \t \t $('#myForm')[0].submit(); \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t }); \t } 
kenitech

+1

su enfoque aquí resolvió un problema ligeramente diferente para mí. Estoy cargando dinámicamente en diferentes formas a través de Ajax y si el nombre del campo era el mismo, la validación existente se aplicaría a menos que primero ejecutara el código anterior. – Damo

19
var form = $('#my_form_id').get(0); 
$.removeData(form,'validator'); 

realmente está funcionando.

+8

Después de hackear esto, lo anterior necesita $ (forma) .removeData ('validator'); – BishopZ

+0

trabajando bien para mí. :) –

+0

Después de este comando llamé nuevamente $ ("formulario"). Validar (GetSettings()); Dentro de GetSettings solo devuelvo {..., groups: GetValidationGroups(), ...} lo que me permitió cambiar dinámicamente los grupos de validación. –

6

También puede utilizar las "reglas" públicos la función de esta manera:

$('input, select, textarea').each(function() { 
    $(this).rules('remove'); 
}); 

Eso es lo que estoy usando;)

+0

Esto funcionó bastante bien para mí. Necesitaba eliminar las reglas que ya estaban aplicadas y luego aplicar un subconjunto más pequeño de reglas. En mi caso, tengo un botón Enviar (que impone más campos obligatorios) y un botón Guardar (que solo impone el formato de los datos). Después de enviar, recibo todo tipo de errores de validación de campo requeridos, luego puedo hacer un ahorro si no hay errores de formato de datos. si hay algunos errores de validación en el guardado, desafortunadamente, también mostrará los errores de validación de campo requeridos, pero esto es lo suficientemente cercano para mí. Probé algunos de los otros ejemplos aquí para deshacerme de eso sin suerte. –

+0

Sí. Estaba en el mismo escenario que @KirkLiemohn: múltiples botones de envío con el código del lado del servidor que necesita saber cuál fue presionado. ¡Llamar a '.submit()' para enviar el formulario habría borrado esos datos, y tu manera fue la única que funcionó para mí! ¡Gracias! – anon

+1

Eche un vistazo a la documentación para esto: https://jqueryvalidation.org/rules –

6

he encontrado ninguna de las otras formas útiles si desea activa o desactiva la validación de formularios (p. ej., validación diferente para tipos de pago ...)

Lo que he tenido que hacer (esto no es una solución agradable pero funciona)

Configure su validación:

jQuery('#form').validate(); 

Desactivación de la forma:

jQuery('#form').validate().currentForm = ''; 

Activando el formulario nuevamente:

jQuery('#form').validate().currentForm = jQuery('#form')[0]; 
+0

gracias, esto me ayudó hoy. Tenía un formulario que estaba enviando con ajax * y luego borraba todas las entradas * para poder usarlo nuevamente; esto activaba que el validador enviara mensajes de error como si el usuario hubiera eliminado toda la información requerida. Utilizo esto en enviar antes de borrar el formulario para evitar enviar correo no deseado al usuario con los mensajes 'este campo es obligatorio' :) – jammypeach

+0

'jQuery ('# formulario'). Validate(). CurrentForm = '';' funciona bien. –

+0

Funciona después de probar otras 6 soluciones.¿Por qué jQ Validate es tan impredecible? –

1

Para toda la entrada etiquetas de la forma:

$('#myform').validate().settings.ignore = '.valid'; 
$('input').addClass('valid'); 

funciona para mí.

Cuestiones relacionadas