2010-10-07 15 views
8

Mam formularz, który sprawdza kody pocztowe na podstawie długości/maksymalnej długości. Muszę mieć zip min mieć 5 cyfr dla wszystkich krajach z wyjątkiem Australii, który musi być 4. Oto co Im kłopoty z:Niestandardowa walidacja jQuery .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"); 

następnie w przepisach

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

Czy długość nie droga?

Odpowiedz

8

Jestem zakładając wszystkie zasady walidacji musi przejść, co oznacza, że ​​nie zawsze będzie minlength jeśli mają długość 4.

Ponadto, jesteś brakuje $ przed ("#PostalCode").length.

Również ta linia ustawia o wartości #Country.

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

Chcesz dostać wartość, a porównać go "Aus".

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

Spróbuj usunąć minlength i zmieniając swoją funkcję niestandardową.

Spróbuj tego:

EDIT: zmieniony tak, że masz 2 weryfikatorów.

Jeden weryfikuje, że powiat jest Australia i długość wartość wynosi co najmniej 4.

Drugi weryfikuje, że powiat jest nie Australia i długość wartość wynosi co najmniej 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 
     } 
    } 
});​ 

Lub jeśli nie potrzebujesz niestandardowy komunikat weryfikacji na podstawie kraju, można to zrobić:

+0

więc jeśli usunę "minlength" z zasad PostalCode, czy nadal będzie wymagać min długości 5 dla wszystkich innych? –

+0

to zwraca błąd "errorFirstWord" nie jest zdefiniowany z jakiegoś powodu w konsoli. –

+0

To powinno. Spróbuj. Ta linia sprawdza, czy * jest Australią i mniej niż czterema, LUB jest mniejsza niż pięć *. '(isAus && $ pCode.length <4) || $ pCode.length <5' – user113716

Powiązane problemy