我有一个输入表单,我正在使用 jQuery 验证器插件执行客户端验证。基本用法效果很好,除了特定场景:
该表单拆分了地址输入字段,允许街道号、名称、城市、州和邮政编码的单独字段。地址本身是表单的可选输入(用户可以选择不输入地址),但我想确保如果使用这些字段中的任何一个,则会提示用户输入所有字段。
这有效,除非有人输入地址并点击提交,然后决定不输入地址。在这种情况下,理想的行为是,一旦他们输入的输入中的文本被删除,地址组就不会突出显示。
这是当前的情况:
- 用户仅在一个输入字段中输入信息,例如街道名称。
- 单击提交按钮。
- 验证器插件使用提示输入完整地址的错误消息突出显示其他地址输入。
- 用户决定不输入地址,并删除之前的输入,例如删除街道名称
- 理想情况下:所有其他突出显示的地址输入都未突出显示,并且错误消息被删除。实际上:突出显示的地址输入和消息一直保留到表单提交。
这是演示问题的 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");
}
});
除了尝试获得所需的突出显示功能外,我还想知道是否有更聪明的方法来完成不涉及混乱条件语句的“全有或全无”输入组。也许我可以使用表单输入组?