私は、検証されたフィールドが空でない場合(またはその逆の場合)にのみ別のフィールドが必要であることを検証する控えめな検証ツールを作成している状況があります。問題は、他のフィールドが再検証されないエッジケースがいくつかあり、無限ループを起こさずに再検証するようにしたいということです。無限ループを発生させずに他のフィールドを検証する
私の検証方法は、次のようになります。
$.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;
}
をしかし、それが通過するたびに、それは他を呼び出すので、これは無限ループが発生します。
元のフィールドを呼び出すことなく、他のフィールドを検証するにはどうすればよいですか?
ええ、私はそれを試みました。結果は奇妙でした。それはうまくいきましたが、検証は全面的に行われ、停止する前に20〜30回検証されることもありました。 '.validate()'呼び出しがフォーム全体を再度検証していたようです。 –