我的表单有四个字段。我需要:
- 如果至少填充一个字段,则验证成功
- 对所有字段使用相同的错误"请输入电话或电子邮件"
以下代码不能在连续的基础上运行 - 即使我使用该功能一次性检查所有字段,所有字段也会单独验证。我做错了什么?
var rule = function (el) {
//return <-- old
return ( //<-- new
($("#CustomerEmail").val() === "") &&
($("#CustomerMobile").val() === "") &&
($("#CustomerWork").val() === "") &&
($("#CustomerHome").val() === "")
//; <-- old
); //<-- new
};
$("#CustomerEmail").rules("add", { required: rule });
$("#CustomerMobile").rules("add", { required: rule });
$("#CustomerWork").rules("add", { required: rule });
$("#CustomerHome").rules("add", { required: rule });
更新:
毕竟我的代码还可以,但是return
在它自己的行上,这使得JS爆炸。
仍然想知道如何将单个错误消息附加到组,而不是有四个错误显示验证失败。
答案 0 :(得分:0)
如果至少填充了一个字段,验证成功
如果所有字段都有值(因为您使用AND运算符),您的规则才会成功。如果一个人足够使用OR运算符
var rule = function (el) {
return
$("#CustomerEmail").val() ||
$("#CustomerMobile").val() ||
$("#CustomerWork").val() ||
$("#CustomerHome").val();
};
答案 1 :(得分:0)
这是一个首先涉及为Must_Have_One
添加新验证方法的解决方案。方法name
是添加到组中每个元素的匹配类,或者您可以使用rules
对象来定义方法。
HTML
<input name="name" class="must_have_one" />
JS
var $form_group=$('.must_have_one')
$.validator.addMethod("must_have_one", function() {
var must_have_els=$form_group.filter(function(){
return this.value !='';
});
if (must_have_els.length) {
return true;
} else {
return false;
}
}, 'Must have one of .....');
var myFormValidator = $("form").validate({
groups: {
must_have_one : "name email"
},
errorPlacement: function(error, element) {
if (myFormValidator.groups[element.attr("name")]) {
/* determine placement for message for group*/
error.insertAfter($form_group.last());
}
else error.insertAfter(element);
}
})
答案 2 :(得分:0)
尽管@ charlietfl的代码有效,但这里是我原始代码的修改版本,可以使用:
var eitherors = $("#CustomerEmail, #CustomerMobile, #CustomerWork, #CustomerHome");
var message = "Please enter either a phone number or email address";
// define the required validation rule
// will return true when all inputs are blank
var requiredRule = function (el) {
return eitherors
.filter(function () { return $(this).val() !== "" })
.length === 0;
};
// define the required validation error message
// returns the error message when 1) all inputs are
// blank, and 2) only for one of the fields (I chose the first one)
var requiredMessage = function (arg, el) {
return (requiredRule() && eitherors.first().is(el))
? message
: "";
};
// use same rule and message on all the "either-or" inputs
eitherors.each(function () {
$(this).rules("add", {
required: requiredRule,
messages: { required: requiredMessage }
});
});
这是通用的,因此仅通过更改jQuery数组和错误消息就可以处理任何元素组。