14

フィールドのグループの動的な数を持つステージを持つフォームがあります。この数は、前のステージの回答に基づいています。

サーバー側のフィールドを配列として生成しています。つまり、

<input id="foo[0]"...
<input id="bar[0]"...

<input id="foo[1]"...
<input id="bar[1]"...

<input id="foo[2]"...
<input id="bar[2]"... etc

数字に関係なく、すべてのフィールドが必須であり、場合によってはタイプと桁数に対しても検証する必要があります。私はクライアント側の処理にjQuery検証プラグインを使用しています(はい、サーバー側のものでもバックアップされています)。フォームはXHTML Strictを渡す必要があるため、検証はインラインで実行できません(編集:以下の補遺を参照) .

私の問題は、動的な数のフィールドで検証を使用する方法がわからないことです。フォームの残りの部分の検証構文は通常、次のようになります。

$(document).ready(function() {

    // validate stage_form on keyup and submit
    var validator = $("#form_id").validate({

        // rules for field names
        rules: {

            name: "required", 
            address: "required",
            age: { required: true, number: true }

        },

        // inline error messages for fields above
        messages: {

            name: "Please enter your name", 
            address: "Please enter your address",
            age: { required: "Please enter your age", number: "Please enter a number" }

        }

    });

});
4

5 に答える 5

13

実際には、ルールを validate() オプションとして初期化する代わりにクラスを使用する場合に機能するはずです。

マークアップ:

<input id="foo[0]" class="required"
<input id="bar[0]" class="required number"

<input id="foo[1]" class="required"
<input id="bar[1]" class="required email"

jQuery:

$(document).ready(function() {

  var validator = $("#form_id").validate({
    messages: {
            name: "Please enter your name", 
            address: "Please enter your address",
            age: { 
               required: "Please enter your age", 
               number: "Please enter a number" 
            }

    }

  });

});

これがうまくいくことを願っています。シナン。

于 2009-09-06T18:59:56.297 に答える
2

カスタム クラス ルールを使用して、xhtml 非互換ルールを定義しようとしましたか?

ドキュメントの例では 1 つのクラスしか使用していませんが、さまざまなカスタム クラスを組み合わせて、必要な検証ルールを実現できると思います。私は自分でこれを試していません。

于 2009-09-04T15:32:30.943 に答える
0

これを行う別の方法を次に示します。

/* Normal validate initialisation. */
$('#myForm').validate({

    /* Use the submitHandler method to add custom-selector-based validation. */
    submitHandler: function(form, ev) {

        /* Find your dynamic field/s. Note that you may want to access them via a scope external to validate, as any selection you do in this internal scope will be static from the form's pre-edit state. */
        var el = $('#selector');

        /* Do your custom validation. */
        if (  el.val() !== 'A'  ) {

            /* Show any errors:- 'fieldname': 'error message'. */
            this.showErrors({
                'name-of-a-field-near-where-you-want-your-error-placed': 'Please enter "A" to continue'
            });

            /* Prevent form submission. */
            return;
        } 
    }
});
于 2015-11-20T14:51:35.313 に答える
-2

「メタデータ」を使用して行う方法を見つけました。

これは、動的な名前を持つテンプレート内で使用する必要があります。だから名前は知らなくていい。

欠点は、きれいなタグを持つ純粋な JavaScript でコードを使用することはまだ不可能です。

<script src="jquery.metadata.js" type="text/javascript"></script>

<input validate="{required: true, email: true, messages: { required: 'i'm required', 'i'm not valid e-mail' }}" name="dynamicRow[  myRandomNumber ]"type="text" class="input_normal" />

 $( function() {
     // setup stuff
     $.metadata.setType("attr", "validate"); 
});
于 2011-08-15T19:28:40.930 に答える