我有一种情况,我正在创建一个不显眼的验证器,只有在验证字段不为空时才必须验证另一个字段是必需的(反之亦然)。问题是有一些边缘情况,其他字段没有重新验证,我想强制它重新验证自己而不会导致无限循环。
我的验证方法如下:
$.validator.addMethod("jqiprequired", function (value, element, params) {
if (!this.optional(element) || (this.optional(params) && this.optional(element))) {
return true;
}
return false;
});
params是我的另一个领域(都是文本框)。如果两者都为空,则传递,如果两者都有值,则传递。只有一个有值时它才会失败。
这样可以正常工作,除非如果一个字段为空,而另一个字段为值,则使用值从字段中删除该值,不重新验证空字段(因为它的值未更改)。
我试过这样做:
if (!this.optional(element) || (this.optional(params) && this.optional(element))) {
$('form').validate().element(params);
return true;
}
但是这会导致一个无限循环,因为每次通过它都会调用另一个循环。
如何在不调用原始字段的情况下让其他字段进行验证?
答案 0 :(得分:1)
尝试在添加此验证方法的脚本中添加变量jqip_validating
,而不是向每个字段添加属性。然后,按如下方式更改验证:
var jqip_calledFromOtherValidator = false;
if (jqip_validating) {
jqip_validating = false;
jqip_calledFromOtherValidator = true;
}
if (!this.optional(element) || (this.optional(params) && this.optional(element))) {
if (!jqip_validating && !jqip_calledFromOtherValidator) {
jqip_validating = true;
$('form').validate().element(params);
}
return true;
}
为了调用其他验证器,必须满足这两个条件,并且只有在第一个验证器调用第二个验证器时才能满足它们。
答案 1 :(得分:0)
您可以为每个字段添加is_validating
属性,以便在您跳过验证时跳过验证,如果没有,则将其设置为true,进行验证然后清除它。