2010-10-07 18 views
8

Ho un modulo che convalida i codici postali su base min/max. Ho bisogno di avere la zip min essere 5 cifre per tutti i paesi tranne l'Australia, che ha bisogno di essere 4. Ecco che cosa Im avere problemi con:Custom jQuery Validation .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"); 

poi nelle regole

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

è la lunghezza non è la strada da percorrere?

risposta

8

Sto assumendo tutti regole di convalida devono passare, il che significa che il vostro minlength sarà sempre esito negativo se si dispone di una lunghezza di 4.

Inoltre, vi state perdendo un $ prima ("#PostalCode").length.

Anche questa riga imposta il valore di #Country.

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

Si desidera ottenere il valore, e confronto a "Aus".

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

provare a rimuovere minlength, e cambiando la funzione personalizzata.

Prova questo:

EDIT: Modificato in modo da avere 2 validatori.

Una verifica che la contea è l'Australia e la lunghezza del valore è almeno 4.

L'altra verifica che la contea è non Australia e la lunghezza del valore è almeno 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 se non avete bisogno di un messaggio di convalida personalizzato in base al paese, si potrebbe fare questo:

$.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

quindi se rimuovo "minlength" dalle regole PostalCode richiederà comunque una lunghezza minima di 5 per tutti gli altri? –

+0

restituisce un errore "errorFirstWord" non è definito per qualche motivo nella console. –

+0

Dovrebbe. Provaci. Questa riga controlla * È Australia e meno di quattro, O è inferiore a cinque *. '(isAus && $ pCode.length <4) || $ pCode.length <5' – user113716

Problemi correlati