2010-10-07 16 views
8

Tengo un formulario que valida los códigos postales en una base de longitud mínima/máxima. Es necesario disponer de la cremallera sea min 5 dígitos para todos los países excepto Australia, que necesita ser 4. Aquí está lo que estoy teniendo problemas con:Validación jQuery personalizada .addMethod

$.validator.addMethod(
    "AusZip", 
    function(value, element) { 
     if ($("#Country").val("Aus") && ("#PostalCode").length < 4)) { 
     return false; 
    } else return true; 
}, 
"Australian Zip Code Must Be at least 4 Digits"); 

luego en las reglas

rules: { 
    PostalCode: { 
     required: true, 
     minlength: 5 //for all countries except AUS 
     AusZip: true // for Aus 
    } 
} 

es la longitud no es el camino a seguir?

Respuesta

8

Asumo todas las reglas de validación deben pasar, lo que significa que su minlength fallará siempre si tiene una longitud de 4.

Además, se está perdiendo una $ antes ("#PostalCode").length.

También esta línea establece el valor de #Country.

$("#Country").val("Aus") 

Usted quiere conseguir el valor, y comparar a "Aus".

$("#Country").val() === "Aus" 

Trate de no incluir minlength, y el cambio de la función personalizada.

Prueba esto:

EDIT: cambiado para que usted tiene 2 validadores.

se verifica que el condado es Australia y la longitud del valor es al menos 4.

El otro verifica que el condado es no Australia y la longitud del valor es al menos 5.

$.validator.addMethod("AusZip", function(value, element) { 
    var isAus = $("#Country").val() === "Aus"; 

    if (isAus && value.length < 4) { 
     return false; 
    } else return true; 

}, "Australian Zip Code Must Be at least 4 Digits"); 

$.validator.addMethod("NonAusZip", function(value, element) { 
    var isNotAus = $("#Country").val() !== "Aus"; 

    if (isNotAus && value.length < 5) { 
     return false; 
    } else return true; 

}, "Zip Code Must Be at least 5 Digits"); 


$('form').validate({ 
    rules: { 
     PostalCode: { 
      required: true, 
      AusZip: true, 
      NonAusZip: true 
     } 
    } 
});​ 

O si usted no necesita un mensaje de validación personalizado basado en el país, usted puede hacer esto:

$.validator.addMethod("GlobalZip", function(value, element) { 
    var isAus = $("#Country").val() === "Aus"; 

    if ((isAus && value.length < 4) || value.length < 5) { 
     return false; 
    } else return true; 

}, "Zip Code is not long enough"); 

$('form').validate({ 
    rules: { 
     PostalCode: { 
      required: true, 
      GlobalZip: true 
     } 
    } 
});​ 
+0

así que si elimino "minlength" de las reglas de PostalCode ¿todavía se necesitará una duración mínima de 5 para todas las demás? –

+0

esto devuelve un error "errorPrimera Palabra" no está definido por algún motivo en la consola. –

+0

Debería. Darle una oportunidad. Esta línea verifica * Es Australia y menos de cuatro, O es menor que cinco *. '(isAus && $ pCode.length <4) || $ pCode.length <5 ' – user113716

Cuestiones relacionadas