我有一個輸入表單,我正在用jQuery驗證器插件執行客戶端驗證。基本的使用效果很好,除了一個特定的場景:Unighighing輸入組
表格分割地址輸入字段,允許單獨的字段爲街道號碼,名稱,城市,州和郵編。地址本身是表單的可選輸入(用戶可以選擇不輸入地址),但我想確保如果使用這些字段中的任何一個,則會提示用戶輸入所有字段。
這是有效的,除非有人在地址中輸入並點擊提交,然後決定不輸入地址。在這種情況下,理想的行爲是,一旦他們輸入的輸入文本被刪除,地址組就不被注意。
這裏是當前的場景:
- 用戶信息輸入到只有一個輸入字段,例如,街道名稱。
- 點擊提交按鈕。
- 驗證器插件會突出顯示其他地址輸入,並顯示錯誤消息提示輸入完整地址。
- 用戶決定不輸入地址,並刪除先前的輸入,例如,擦除街道名稱
- 理想情況下:所有其他突出顯示的地址輸入都不顯示,並且錯誤消息被刪除。 實際上:突出顯示的地址輸入和消息將保留,直到表單提交。
下面是演示問題的javascript和相應的JSFiddle。
$("form").validate({
errorClass: 'error',
errorElement: 'label',
submitHandler: function() {
alert("Form submitted");
return false;
},
groups: {
address: "streetNumber streetName city state zipcode"
},
rules: {
streetNumber: {
required: {
depends: function(){
return $("#streetName").val() != '' || $("#city").val() != '' || $("#state").val() != '' || $("#zipcode").val() != '';
}
}
},
streetName: {
required: {
depends: function(){
return $("#streetNumber").val() != '' || $("#city").val() != '' || $("#state").val() != '' || $("#zipcode").val() != '';
}
}
},
city: {
required: {
depends: function(){
return $("#streetNumber").val() != '' || $("#streetName").val() != '' || $("#state").val() != '' || $("#zipcode").val() != '';
}
}
},
state: {
required: {
depends: function(){
return $("#streetNumber").val() != '' || $("#streetName").val() != '' || $("#city").val() != '' || $("#zipcode").val() != '';
}
}
},
zipcode: {
required: {
depends: function(){
return $("#streetNumber").val() != '' || $("#streetName").val() != '' || $("#city").val() != '' || $("#state").val() != '';
}
}
}
},
messages: {
streetNumber: {required: "Must provide full address"},
streetName: {required: "Must provide full address"},
city: {required: "Must provide full address"},
state: {required: "Must provide full address"},
zipcode: {required: "Must provide full address"}
},
highlight: function(element, errorClass, validClass) {
$(element).addClass(errorClass).removeClass(validClass);
},
unhighlight: function(element, errorClass, validClass) {
$(element).removeClass(errorClass);
},
errorPlacement: function(error, element) {
var n = element.attr("name");
if (n == "streetNumber" || n == "streetName" || n == "city" || n == "state" || n == "zipCode")
error.insertAfter("#zipcode");
}
});
除了試圖讓亮點所需的功能,我也想知道是否有完成,不涉及條件語句的亂七八糟的「全有或全無」輸入組一個更聰明的方法。也許我可以使用表單輸入組?
當我在突出顯示/ unhighlight函數中放置console.log()時,我注意到當我清除輸入時,它們從不會被調用,所以這可能是問題的一部分 – Corey
您將需要'unhighlight'回調函數做你的'突出'回調函數的反面。更多像這樣:'$(element).removeClass(errorClass).addClass(validClass);' – Sparky
順便說一句,'highlight/unhighlight'只有在觸發或清除錯誤時纔會調用。換句話說,您同時看到錯誤消息出現並消失。 – Sparky