2011-05-16 22 views
5

Aquí es mi sencillo código de validación para las pruebas:jQuery validación: regla personalizada no se llama

jQuery.validator.addMethod("oneTypeChecked", function (value, element) { 
     return false; //$(':checkbox:checked') > 0 
    }, "Check one or more type"); 

    $("#RequestCreateForm").validate({ 
     rules: { 
      ChkBoxType1: { oneTypeChecked: true } 
     } 
    }); 

Pero mi método oneTypeChecked nunca es llamado cuando presente formulario. ¿Por qué?

Aquí está mi código HTML:

<div class="editor-field"> 
    <input type="checkbox" id="ChkBoxType2" name="requestTypeIds2" value="2">Type 2  
    <input type="checkbox" id="ChkBoxType1" name="requestTypeIds1" value="1">Type 1   
    <input type="checkbox" id="ChkBoxType3" name="requestTypeIds3" value="3">Type 3 
</div> 

Muchas gracias!

+0

puede también publicar su margen de beneficio del HTML? ¿Es posible que no haya un elemento llamado 'ChkBoxType' en su marcado? –

+0

@sJhonny: hecho! – Tuizi

+0

La validación no viene de fábrica estándar, ¿qué complemento estás usando? – Hogan

Respuesta

6

validación plugin funciona de acuerdo con el nombre de atributo y no de identificación. intente cambiar el atributo de nombre en su entrada.

+0

¡Sí! ¡Es verdad! ¡Con el nombre, funciona! ¡Muchas gracias! – Tuizi

0

Según tengo entendido, si no agrega el requerido, será válido porque no está marcado.

rules: { 
     ChkBoxType1: { required : true, oneTypeChecked: true } 
    } 
+0

No, lo que se requiere es que se requiera al menos una casilla de verificación, no solo la 'ChkBoxType1' – Tuizi

2

con este html

<form id="RequestCreateForm" action="" method="post"> 
    <div class="editor-field"> 
     <input type="checkbox" class="oneTypeChecked" name="requestTypeIds2" value="2">Type 2  
     <input type="checkbox" class="oneTypeChecked" name="requestTypeIds1" value="1">Type 1  
     <input type="checkbox" class="oneTypeChecked" name="requestTypeIds3" value="3">Type 3 
    </div> 
    <input type="submit" value="submit" /> 
</form> 

y esto jQuery

jQuery.validator.addMethod("oneTypeChecked", function(value, element) { 
    return $('.oneTypeChecked:checked') > 0 
}, "Check one or more type"); 

$("#RequestCreateForm").validate({ 
    rules: { 
     ChkBoxType1: { 
      oneTypeChecked: true 
     } 
    } 
}); 

obtendrá el resultado que desea

aquí es un WORKING DEMO

+1

después de horas de buscar por qué mi validación personalizada no funciona, su solución finalmente me mostró, no había agregado el nombre del método a la clase de la entrada. ¡Gracias! Ninguno de los otros ejemplos muestra este paso crucial – BMills

+0

Estoy feliz de que esto te haya ayudado, ten un gran día – mcgrailm

+1

Gracias ... pasé más de 4 horas sobre este tema, ¡y finalmente todo se redujo a esto! Gracias, hombre ... esto es absolutamente brillante – Nirman

Cuestiones relacionadas