検証済みのフィールドが空でない場合にのみ別のフィールドが必要であることを検証する必要がある控えめなバリデーターを作成している状況があります (およびその逆)。問題は、他のフィールドが再検証されないエッジケースがいくつかあることです。無限ループを引き起こさずに強制的に再検証したいと考えています。
私の検証方法は次のようになります。
$.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;
}
しかし、これは、通過するたびにもう一方を呼び出すため、無限ループを引き起こします。
元のフィールド自体を呼び出さずに、他のフィールドを検証するにはどうすればよいですか?