Validación de múltiples campos basada en otro campo

Mi configuración es que tengo un campo llamadoclaimaint_rep, ahora cuando ese valor es Sí, quiero que se requieran varios campos. Ahora estoy usando jquery validar. Mi código actualmente es:

 $('#aspnetForm').validate({
        errorPlacement: function (error, element) { },

        rules:
                {
                    claimsol:
                        {
                            required: function (element) {
                                return $("#ctl00_ContentPlaceHolder1_claimant_rep").val() == "Yes";
                            },
                            minlength: 2
                        }

                },

        highlight: function (element) {
            $(element).closest('.control-group').removeClass('success').addClass('error');
        },
        success: function (element) {
            $(element).closest('.control-group').removeClass('error').addClass('success');
        }
    });

HTML de ejemplo:

<div class="control-group">
    <label class="control-label" for="inputEmail">Reference Number</label>
    <div class="controls">      
        <asp:TextBox ID="solicitor_reference" CssClass="span3 claimsol" runat="server"></asp:TextBox>
    </div>
  </div>

El nombre del campo se debe a que es un formulario web ASP (ugh), ahora por lo que parece que la regla Claimsol solo se aplicará a un campo con el nombre Claimsol. Quiero aplicar esa regla a varios campos, idealmente sin tener que configurar cada uno en la sección de reglas. ¿Que me estoy perdiendo aqui?

preguntado el 16 de abril de 13 a las 08:04

1 Respuestas

Cotización OP:

Quiero aplicar esa regla a varios campos, idealmente sin tener que configurar cada uno en la sección de reglas.

Realmente no tengo idea de lo que está tratando de lograr en última instancia, pero solo hay un par de métodos que pueden aplicar reglas a granel.

1) rules('add') Método para agregar reglas dinámicamente a un selector de destino jQuery. Si el selector apunta a varios campos, debe envolver este método dentro de un .each().

$('[name*="field"]').each(function() {
    $(this).rules('add', {
        required: true,
        number: true,
        messages: { // optional custom messages
            required:  "your custom message",
            number:  "your custom message"
        }
    });
});

Las diversas formas de implementar esto son ilimitadas.

Ver: https://stackoverflow.com/a/15116062/594235

2) addClassRules() Método por crear un class nombre que representa su regla compuesta. (Sin embargo, anular los mensajes de error predeterminados no es tan simple como en el punto n.º 1).

$.validator.addClassRules("myclass", {
    required: true,
    minlength: 2
});

También debes agregar que class nombre a cada entrada que necesita usar esa regla.

<input type="text" class="myclass" name="field" />

DEMO: http://jsfiddle.net/62uua/

3) O puede crear una regla completamente nueva basada en su función de dependencia usando el addMethod() Método.

$.validator.addMethod("myrule", function(value, element) { 
    // your function
    // return false triggers the error
    // return true passes validation
}, "Custom message");

Consulte la documentación para conocer todos los métodos y usos disponibles: http://docs.jquery.com/Plugins/Validation


EDITAR:

Si está tratando de suprimir los mensajes de error, no pase una función de devolución de llamada vacía como lo hizo aquí,

errorPlacement: function (error, element) { },

pasar un return false en lugar,

errorPlacement: function (error, element) { 
    return false;  // suppress default error message placement
},

contestado el 23 de mayo de 17 a las 13:05

¿Dónde dentro de ese código se insertaría cualquiera de esos, vi el elemento 2) después de publicar la pregunta pero no se encuentra dentro del bloque de validación que he escrito? - Ryan McDonough

@RyanMcDonough, el elemento 2 iría a cualquier lugar dentro del documento listo. Aún necesitaría inicializar el complemento con .validate(). - Sparky

Ah, claro, gracias por la nota sobre la supresión del mensaje de error también. Gran respuesta. - Ryan McDonough

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.