web-dev-qa-db-ja.com

jQuery検証メソッドを追加するときにthis.optional(element)は何をしますか?

ドキュメントを参照してください:
https://jqueryvalidation.org/jQuery.validator.addMethod/

this.optional(element)は何をするのだろうか。テストする2つのフォームを作成しました。
Form1 および Form2this.optional(element)のあるものとないもの。理論的に言えば、Andrew Whitakerによる この回答 に関するいくつかのコメントによると:

すべて this.optionalは、「フィールドがオプションの場合、空白の場合はtrueを返す」と言う

そして

this.optional checkは基本的に、フィールドがルールに適合するかどうかを評価する前に、フィールドが空白かどうかを確認することです。

しかし、実際には Form1Form2 の動作に違いはありません。アクションの違いを理解してください。

35
Mori

OK ...したがって、例では、どちらの形式でもフィールドが空白になることはありません。プレースホルダー値があるか、メールアドレスで試行されています。 this.optional(element)の重要な点は、要素が空白であり、必要ない場合にすぐにtrueを返すことです。

したがって、次の2つの方法がある場合:

jQuery.validator.addMethod("BOB", function (value, element) {
    return this.optional(element) || 
        element.value === 'BOB';
}, 'You did not enter BOB');

jQuery.validator.addMethod("mustbeBOB", function (value, element) {
    return element.value === 'BOB';
}, 'You did not enter BOB');

BOB requiredのクラスを追加することは、mustbeBOBのクラスを入力することと同じです。 BOBの値を持つ検証のみに合格するmustbeBOBのクラスに対して、空白または「BOB」を許可するBOBのクラスを持つことと比較してください。空白は失敗します。それは理にかなっていますか?

43
Ryley

this.optionalは、必須またはオプションの要素で使用される可能性のある汎用検証メソッドで使用することを目的としています。フィールドに値が入力されていない場合、独自のチェックをすべてスキップできます。フィールドがオプションの場合、メソッドはすぐに正常に戻ります。必要な場合、メソッドはすぐに失敗を返します。

これを使用することにより、メソッドは値が空でないと仮定でき、残りのコーディングを簡素化できます。

3
Barmar