我想使用JQuery驗證插件,我能弄清楚如何在靜態字段上使用它。Jquery自定義驗證插件動態表單上的AddMethod
我的問題是如何在我的動態表單上使用它。我創造了一個小提琴來討論我的問題。希望你能耐心閱讀。小提琴的鏈接是here
現在,這是我想要做的,驗證每個文本框中輸入的機器ID,並確保它是唯一的。假設你輸入兩次ABCD-123,系統應該提醒你它不是唯一的。
希望有人能幫我一把。謝謝
我想使用JQuery驗證插件,我能弄清楚如何在靜態字段上使用它。Jquery自定義驗證插件動態表單上的AddMethod
我的問題是如何在我的動態表單上使用它。我創造了一個小提琴來討論我的問題。希望你能耐心閱讀。小提琴的鏈接是here
現在,這是我想要做的,驗證每個文本框中輸入的機器ID,並確保它是唯一的。假設你輸入兩次ABCD-123,系統應該提醒你它不是唯一的。
希望有人能幫我一把。謝謝
首先 - 在編寫代碼時在代碼中添加註釋。
的錯誤是在這裏:
var arrElements = $(".machineID");
arrElements
總是空的,沒有與machineID
類
沒有元素,你的每一個不起作用。我重構了它http://jsfiddle.net/PaTJ4/
您的代碼可以使用一些更多的修復程序,這對於該任務來說有點太複雜。但現在它起作用了。
好運
優秀的職位..對不起,我只是輸入一切,所以我忘了發表評論。儘管我仍然有一個查詢,但是在我看到的每個addmethod方法中,我總是會看到這條線this.optional(element)。這條線是什麼意思?我只是添加它認爲它始終是必需的。 – 2010-10-11 08:56:45
@Mark這是驗證插件的一部分,我猜想。它會檢查該字段是否設置爲可選,以便它不驗證可選字段。你不需要這個我想。但我從來沒有使用驗證插件 – naugtur 2010-10-11 09:06:10
我對你的版本改進 - 在檢測到重複時,在重複場的任何一個應該被標記爲無效,並應能爲了解決這個問題而改變。因此,您需要每次重新驗證所有其他字段(使用validator.element()
),但避免遞歸(使用validator.validatingOthers
)。
我會在這裏張貼checkMachineIDs代碼的完整性:
function checkMachineIDs(element){
if($(element).val() != ""){
var arrElements = $("#machineList .machineID");
var $element = $(element);
var validator = $($element[0].form).validate();
if(arrElements.length > 1){
var valid = true;
arrElements.not('#'+$element.attr('id')).each(function() {
var current = $(this);
if (current.val() == $element.val())
valid = false;
});
if (!validator.validatingOthers) {
validator.validatingOthers = true;
arrElements.not('#'+$element.attr('id')).each(function() {
validator.element(this);
});
if (valid) validator.element($element);
validator.validatingOthers = false;
}
return valid;
}else{
return true;
}
}else{
return true;
}
}
FYI中的jsfiddle如果你把JS代碼在JavaScript標籤盒這是不錯的了。 [現在看它] – naugtur 2010-10-11 08:04:19
首先,它看起來像缺少輸入中的'machineID'類。然後,您應該在表單中查找輸入 - 您的循環包含隱藏的模板。我現在面臨的唯一問題是,當您修復其他重複(而不是首先導致驗證的重複)時,腳本不會重新驗證。儘快更新。 – 2010-10-11 08:32:15