2010-05-17 43 views
46

Estoy usando MVC para crear formularios que se generan en tiempo de ejecución. Para la validación, estoy probando la biblioteca de validación de jQuery que es muy conveniente de usar. Tengo la expresión de validación de cada campo de la CDATA atributo de la etiquetajQuery deshabilitar la validación de reglas en un solo campo

<input type="text" name="xyz" id="xyz" class="defaultTextBox" 
    cdata="{validate:{required:true, decimal:true, messages: 
      {required:'Please enter an decimal value', 
      decimal:'Please enter a valid decimal'}}}"> 

Esto funciona muy bien. Ahora, un requisito más que tengo es que algunos campos se muestran y ocultan de acuerdo con la lógica en la página y necesito deshabilitar la validación en los campos ocultos para que no interfieran con el envío del formulario. Simplemente alternar lo requerido: verdadero a falso y de nuevo a verdadero debería ser suficiente. Solo que no sé cómo.

¿Alguien tiene alguna experiencia con eso?

Respuesta

72

Simplemente agregue la regla de ignorar y defina el selector. En este ejemplo, la validación ignorará todos los elementos que tienen el class="ignore"

$("#myform").validate({ 
    ignore: ".ignore" 
}) 
+0

fresca .. funcionó – shake

+33

Advertencia ! El valor predeterminado en 'jquery.validate.js' en la configuración' defaults' es 'ignore:": hidden "' así que sugeriría poner 'ignore:" .ignore,: hidden "' u otros campos ocultos que no utilizado para validar de repente le dará errores –

+1

No importa, lo estaba ejecutando antes de jquery.validate.js – Nilzor

6

Tras la respuesta de Gabe, también puede establecer el valor por defecto de ignorar, por lo que no tiene que fijar en cada formulario .

$.validator.setDefaults({ignore: ".ignore"}); 

También tenga en cuenta, el campo es ignorar un selector de jQuery que se utiliza en la función jQuery not() por lo que cualquier selector de validez se puede utilizar, no sólo las clases simples.

Consulte también http://docs.jquery.com/Plugins/Validation/validate#toptions para obtener detalles sobre otros valores predeterminados que se pueden establecer.

30

Si está utilizando la validación JQuery de ASP.NET MVC discreta, debe establecer la configuración de esta manera. Esto se debe a la forma en que Microsoft realmente llama a jQuery para validar. Esto debería ser seguro hacerlo dentro de un método ready.

Editar: Por favor, vea el comentario de Cory a continuación antes de copiar pegar esto. Este es mi código original

$("form").data("validator").settings.ignore = ".data-val-ignore, :hidden, :disabled"; 

Entonces sólo se aplican .data-val-ignore clase de cosas no para validar.

Tenga en cuenta que probablemente quiera agregar :hidden, que en realidad es el comportamiento de omisión predeterminado definido en jquery.validate.js. Me gusta agregar :disabled también.

$.extend($.validator, { 
defaults: { 
    messages: {}, 
    groups: {}, 
    rules: {}, 
    errorClass: "error", 
    validClass: "valid", 
    errorElement: "label", 
    focusInvalid: true, 
    errorContainer: $([]), 
    errorLabelContainer: $([]), 
    onsubmit: true, 
    ignore: ":hidden",    // default for ignore in jquery.validate.js 
    ignoreTitle: false, 
    onfocusin: function(element, event) { 
     this.lastActive = element; 

Y, finalmente, es posible que desee darle un estilo, especialmente útil durante la depuración.

.data-val-ignore 
{ 
    background: #eee; 
} 
+1

Gracias por el ejemplo de MVC; Exactamente lo que estaba buscando. –

+7

La forma de acceder a la configuración parece haber cambiado (al menos en mi proyecto), y ahora es: $ ("formulario"). Validate(). Settings.ignore - ¡por si acaso esta era la solución para cualquier otra persona! –

+0

@CoryW. ¡Realmente creo que deberías convertir este comentario en una respuesta! me ahorró mucho tiempo. Ninguna otra solución estaba funcionando para mí – Code

3

que tenían un mejor tiempo con $('.multiselect').rules('remove');

en mi caso por cualquier razón o la adición de .cancel.data-val-ignore tanto al $.validator.setDefaults y $('.multiselect') no solucionarlo.

También probé

$('select[multiple][data-val]').removeAttr('data-val').removeAttr('data-val-number').addClass('data-val-ignore').validate({ ignore: "[multiple]" }); 
$.validator.setDefaults({ ignore: ":hidden,:disabled,.data-val-ignore" }); 
$('.multiselect').closest('form').data('validator').settings.ignore = ":hidden,:disabled,.data-val-ignore, .data-val-ignore *"; 
$('.multiselect').data('validator').settings.ignore = "[multiselect]" 

cada uno de los ...y combinaciones de ellos

mi jquery.validate.js fue

/*! jQuery Validation Plugin - v1.11.0 - 2/4/2013 
* https://github.com/jzaefferer/jquery-validation 
* Copyright (c) 2013 Jörn Zaefferer; Licensed MIT */ 

jQuery se

jQuery JavaScript Library v1.9.1 - Fecha: 2013-2-4

Cuestiones relacionadas