2011-05-09 80 views
0

我有一個問題得到它的工作。在我們的表格中,我們根據您選擇的國家/地區驗證郵政編碼(郵政編碼)的長度。澳大利亞和匈牙利有4個字符最小長度,巴林必須有至少3個,其他國家必須至少有5所以我寫了一個規則:jquery驗證器添加方法

澳大利亞

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

所有其他國家,這是磨片如果您選擇了匈牙利,並有3位郵政編碼相同 - 再我的問題是

$.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位數的拉鍊,你的錯誤。當我刪除「RegZip」時,如果小於4位數字,您只會在澳大利亞/匈牙利出現錯誤,而如果小於3則匈牙利錯誤。問題是所有其他國家都沒有要求。我錯過了什麼?

thx!

編輯 - 添加「UpdateCountry」作爲元素ID。作品。抱歉混淆 - 我的不好!

+0

你可以創建一個小提琴嗎? – mcgrailm 2011-05-09 16:29:02

+0

@mcgrailm - 這裏是小提琴http://jsfiddle.net/gYs2Y/ – 2011-05-09 16:44:03

回答

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'); 
+0

什麼是.toUpperCase();爲什麼?爲了確保值是大寫,他們都已經在選擇列表中 - 我錯過了什麼?我在這裏有一個小提琴jsfiddle.net/gYs2Y – 2011-05-09 16:49:06

+0

我已經刪除了.toUpperCase()。巴林在您的國家名單中也是BHR。我對驗證器插件不太熟悉,可能有更好的方法來完成該插件的本地化,我現在不只是看到它。 :) – 2011-05-09 17:33:29

+0

我喜歡這種方法,並會繼續使用它。我得到的錯誤不是由於我的驗證規則本身,而是由於錯誤地命名了元素。 – 2011-05-09 17:41:05

1

由於您提供的代碼只是驗證RegZip函數中的三個國家,因爲其他所有內容都返回true。您應該在else子句中調用其他一些通用的zip驗證。

+0

你可以擴大。那些是唯一的三個有特殊要求的國家,所有其他國家應該有5分鐘的最小長度。我想我理解你的意思,你能發佈一些代碼嗎? – 2011-05-09 16:32:47

0

我就會在$(「#國」),去掉所有的檢查。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(); 
+0

所以爲每個國家的長度添加一個等級(Aus,Hun長度4等級=「四」 - 所有其他長度5等級=「五」等等),並驗證與課程長度? – 2011-05-09 16:47:06

+0

nope看我編輯 – mcgrailm 2011-05-09 16:59:29

+0

如何添加一個類的幫助?不知道我跟着。 – 2011-05-09 17:21:52