0

フォームの検証中は正常に機能していますが、

Descriptionそれは、最初に、次に、Code次にメッセージを送信することですName。しかし、私は検証が最初であることを望んでNameCodeますDescription

$(document).ready(function() {
    $("#added").validate({
        rules: {
            Name: {
                required: true
            },
            Code: {
                required: true
            },
            Description: {
                required: true
            },

        },

        messages: {
            Name: {
                required: "Enter Name"
            },
            Code: {
                required: "Enter code"
            },

            Description: {
                required: "Enter Description"
            },
        },

        errorPlacement: function(error, element) {
            $("#error-messages").html(error); // error container
        }
    });​
});

HTML:

<div id="error-messages"></div>
<s:form action="added" id="added" method="post" >
   <s:textfield name="Name" id="Name" label="Name" labelposition="top" />
   <s:textarea name="Code" id="Code" rows="10" cols="50" 
                 label="Code" labelposition="top"/>

   <s:textarea name="Description" id="Description" rows="5" cols="50"
                 label="Description" labelposition="top"/>
<s:form>

これを解決するには?

4

1 に答える 1

0

jQuery 検証プラグインは、要素を DOM の順序で取得します (関数、l. 461 を参照) $.validator.prototype.elements

したがって、最後の要素から最初の要素まで検証するための解決策は、独自のスクリプト セクションでこのコードを使用してこの関数にパッチを適用することです。

$.validator.prototype.elements = function() {
    var validator = this,
        rulesCache = {};

    // select all valid inputs inside the form (no submit or reset buttons)
    return 
        $(  // Added this in order to re-encapsulate in a jQuery object the reversed array (see below)
        $(this.currentForm)
        .find("input, select, textarea")
        .not(":submit, :reset, :image, [disabled]")
        .not( this.settings.ignore )
        .filter(function() {
            if ( !this.name && validator.settings.debug && window.console ) {
                console.error( "%o has no name assigned", this);
            }

            // select only the first element for each name, and only those with rules specified
            if ( this.name in rulesCache || !validator.objectLength($(this).rules()) ) {
                return false;
            }

            rulesCache[this.name] = true;
            return true;
        })
        .get().reverse()  // Added this in order to reverse the array order
    );
}
于 2012-12-08T21:54:31.727 に答える