2010-10-07 29 views
8

Posta kodlarını min/maks uzunluk temelinde doğrulayan bir formum var. kurallarda sonraÖzel jQuery Doğrulama .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"); 

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

uzunluğu mı: Ben zip dk Burada 4. olması gerekir Avustralya HARİÇ tüm ülkeler için 5 basamaklı olması Im ilgili sorun yaşıyorsanız neyi ihtiyacımız olan gitmek için yol değil mi?

cevap

8

ben yani bütün doğrulama kuralları geçmelidir farz ediyorum ki onun sorumlusu da minlength sen Ayrıca, bir $("#PostalCode").length önce kaçırıyorsun 4.

uzunluğu varsa her zaman başarısız olur. #Country ait değerini ayarlar

Ayrıca, bu hattı.

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

Sen değeri elde istiyorum ve "Aus" için o karşılaştırın.

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

minlength kaldırarak ve özel bir işlev değiştirmeyi deneyin.

bu deneyin:

DÜZENLEME

: değiştirildi size 2 doğrulayıcılarını var ki.

bir il Avustralya ve olan değer uzunluğu en az 4

diğer il değildir Avustralya ve değerinin uzunluğu en az 5 olduğunu doğrular olduğunu doğrular.

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

Yoksa ülkeye bağlı bir özel doğrulama iletisi gerekmiyorsa, bunu yapabilirdi:

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

Yani "minlength" Posta Kodu kurallarından kaldırırsam, diğerleri için hala 5 min uzunluğa gerek duyar mı? –

+0

bu, bir hata "consoleFirstWord", konsoldaki bir nedenle tanımlanmadı. –

+0

Olmalı. Bir şans ver. Bu hat, * Avustralya'dır ve dörtten az, VEYA beşten azdır *. '(isAus && $ pCode.length <4) || $ pCode.length <5' – user113716