jquery验证器添加方法

时间:2011-05-09 16:22:12

标签: jquery validation

我遇到了解决这个问题的问题。在我们的表格中,我们根据您选择的国家/地区验证邮政编码(邮政编码)的长度。澳大利亚和匈牙利的最小长度为4个字符,巴林必须至少有3个字符,所有其他国家必须至少有5个字符。所以我写了一条规则:

澳大利亚

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

匈牙利

$.validator.addMethod("HunZip", function(value, element) {
    var isHun = $("#UpdateCountry").val() === "HUN";
    if ( isHun && value.length < 4 ) {
        return false;
    } else return true;
}, "Hungarian Zip Code Must Be at least 4 Digits");

和巴林

$.validator.addMethod("BHRZip", function(value, element) {
    var isBHR = $("#UpdateCountry").val() === "BHR";
    if ( isBHR && value.length < 3 ) {
        return false;
} else return true;
}, "Bahrain Zip Code Must Be at least 3 Digits");

此处指定的所有其他国家/地区,这就是我的问题所在

$.validator.addMethod("RegZip", function(value, element) {
    var notAus = $("#UpdateCountry").val() != "AUS";
    var notBHR = $("#UpdateCountry").val() != "BHR";
    var notHun = $("#UpdateCountry").val() != "HUN";
    if ( notAus && notBHR && notHun && value.length < 5 ) {
        return false;
    } else return true;
}, "Zip Code Must Be at least 5 Digits");

当我为“RegZip”添加规则时,即使您选择澳大利亚或匈牙利并且有4位数的拉链,您也会收到错误 - 如果您选择匈牙利并且有3位数的拉链,则会出现相同的错误。当我删除“RegZip”时,如果它少于4位,则只会在澳大利亚/匈牙利出现错误,如果小于3,则只会出现匈牙利错误。问题是所有其他国家都没有要求。我错过了什么?

THX!

编辑 - 添加“UpdateCountry”作为元素ID。作品。抱歉混淆 - 我的坏!

3 个答案:

答案 0 :(得分:1)

使用您提供的代码,您只需验证RegZip函数中的三个国家/地区,因为其他所有内容都返回true。您应该在else子句中调用其他通用zip验证。

答案 1 :(得分:1)

更好的方法就是这样:

 var zips = {
  'AUS': { min: 4 },
  'HUN': { min: 4 },
  'BHR': { min: 3 }

};
var zipOther = { min: 5 };

$.validator.addMethod('zip', function(value, element) {
  return value.length >= (zips[$('#UpdateCountry').val()] || zipOther)['min'];
}, 'Zip code not the correct length');

答案 2 :(得分:0)

我会删除所有关于$(“#Country”)的检查.val()和简单更改国家选择更改时输入的类名

修改

首先将类“RegZip”添加到要作为起点验证的输入

然后添加验证方法

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

//Hungary

$.validator.addMethod("HunZip", function(value, element) {
    if (value.length < 4 ) {
        return false;
    } else return true;
}, "Hungarian Zip Code Must Be at least 4 Digits");

//and Bahrain

$.validator.addMethod("BHRZip", function(value, element) {
    if (value.length < 3 ) {
        return false;
    } else return true;
}, "Bahrain Zip Code Must Be at least 3 Digits");

//All other countries specified here, and this is where my problem is

$.validator.addMethod("RegZip", function(value, element) {
    if ( notAus && notBHR && notHun && value.length < 5 ) {
        return false;
    } else return true;
}, "Zip Code Must Be at least 5 Digits");

将更改事件添加到下拉列表

$('#dropdown_menu_selector').onchange(function(){
    if (this.value === "AUS"){
        $('#input_to_validate').removeClass().addClass('AUSZip')
    }
    //etc etc..
});

验证表格

   $('#formid').validate();