2

我有一种情况,我正在创建一个不显眼的验证器,该验证器必须验证仅当验证的字段不为空时才需要另一个字段(反之亦然)。问题是在某些极端情况下,其他字段不会重新验证,我想强制它重新验证自己而不会导致无限循环。

我的验证方法如下所示:

$.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;
}

但这会导致无限循环,因为每次它通过时,它都会调用另一个。

如何在不调用原始字段的情况下使其他字段验证?

4

2 回答 2

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;
}

为了调用另一个验证器,必须满足两个条件,并且只有在第一个验证器调用第二个验证器时才能满足它们。

于 2011-09-12T18:20:20.937 回答
0

您可以is_validating为每个字段添加一个属性,以便如果它在您跳过验证,如果不是,则将其设置为 true,进行验证然后清除它。

于 2011-09-12T16:36:02.447 回答