2

検証済みのフィールドが空でない場合にのみ別のフィールドが必要であることを検証する必要がある控えめなバリデーターを作成している状況があります (およびその逆)。問題は、他のフィールドが再検証されないエッジケースがいくつかあることです。無限ループを引き起こさずに強制的に再検証したいと考えています。

私の検証方法は次のようになります。

$.validator.addMethod("jqiprequired", function (value, element, params) {
    if (!this.optional(element) || (this.optional(params) && this.optional(element))) {
        return true;
    }

    return false;
});

params は私のもう 1 つのフィールドです (どちらもテキスト ボックスです)。両方が空の場合は合格、両方が値を持っている場合は合格です。値が 1 つだけの場合にのみ失敗します。

これは正常に機能しますが、あるフィールドが空で別のフィールドに値がある場合、値のあるフィールドから値を削除すると、空のフィールドは再検証されません (値が変更されていないため)。

私はこれをやってみました:

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

他のバリデーターを呼び出すには、両方の条件が満たされている必要があり、最初のバリデーターが2番目のバリデーターを呼び出した場合にのみ満たすことができます。

于 2011-09-12T18:20:20.937 に答える
0

各フィールドに属性を追加しis_validatingて、オンになっている場合は検証をスキップし、そうでない場合は true に設定して検証を行い、クリアすることができます。

于 2011-09-12T16:36:02.447 に答える