2010-10-07 17 views
8

Ich habe ein Formular, das Postleitzahlen auf einer Min/Max-Länge überprüft. Ich brauche die Zip-min 5 Ziffern für alle Länder außer Australien haben, die 4. Hier werden muss, ist, was Im Probleme, mit:Benutzerdefinierte jQuery-Validierung .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"); 

dann in den Regeln

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

Ist Länge nicht der Weg zu gehen?

Antwort

8

Ich gehe davon aus alle Prüfregeln bestanden haben müssen, was bedeutet, dass Ihre minlength immer fehlschlagen, wenn Sie eine Länge von 4.

Auch haben, sind Sie ein $ vor ("#PostalCode").length fehlt.

Auch diese Zeile setzt den Wert #Country.

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

Sie wollen den Wert erhalten, und vergleichen es "Aus".

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

Versuchen Sie, minlength zu entfernen, und ändern Sie Ihre benutzerdefinierte Funktion.

Try this:

EDIT: geändert, so dass Sie 2 Validierer haben.

Man verifiziert, dass der Kreis ist Australien und die Länge des Wertes mindestens 4.

Die andere überprüfen, dass der Kreis nicht Australien ist und die Länge des Wertes mindestens 5 beträgt.

$.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 
     } 
    } 
});​ 

Oder wenn Sie auf dem Land, keine benutzerdefinierte Validierungsnachricht benötigen, können Sie dies tun könnte:

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

also, wenn ich "minlength" aus den PostalCode-Regeln entfernen, wird es immer noch eine Mindestlänge von 5 für alle anderen benötigen? –

+0

Dies gibt einen Fehler zurück "errorFirstWord" ist aus irgendeinem Grund in der Konsole nicht definiert. –

+0

Es sollte. Versuche es. Diese Zeile prüft auf * Ist Australien und weniger als vier, ODER ist weniger als fünf *. '(isAus && $ pCode.length <4) || $ pCode.length <5' – user113716

Verwandte Themen