3

私はjqueryでバリデーションのプラグインを使用しています。このようにルールを追加すると、非常に奇妙なことがあります。

$(document).ready(function () {
$.validator.addMethod("endDateGreaterThan", function (value, element, params) {
            if (value != "" && $(params).val() != "") {
                var endDate = formatValidateDate(value);
                var startDate = formatValidateDate($(params).val());
                if (startDate == null || endDate == null)
                    return true;
                return new Date(endDate) >= new Date(startDate);
            }
            return true;
        }, "");

var validator = $("#form").validate({
            rules: {
                StartDate: "required",
                EndDate: {
                    required: true,
                    endDateGreaterThan: "#StartDate"
                },                  
                DiscountRate: {
                    required: true,
                    max: 100,
                    min: 1
                }
            },
            messages: {
                StartDate: {
                    required: "ErrorMessageStartDateRequired"
                },
                EndDate: {
                    required: "ErrorMessageEndDateRequired",
                    endDateGreaterThan: "ErrorMessageEndDateGreaterThanStartDate"
                },
                DiscountRate: {
                    required: "ErrorMessageDiscountRateRequired",
                    max: "Global.ErrorMessageDiscountRateRange",
                    min: "Global.ErrorMessageDiscountRateRange"
                }
            }
      });

ルールの追加はありません。js ファイルをデバッグし、jquery.validation.js ファイルの validate メソッドにステップインすると、validate メソッドに渡されたオプションが空であることがわかりました。

しかし、ルールを動的に追加すると、

$("#StartDate").rules("add", {
            required: true,
            messages: {
                required: "StartDate is required"
            }
        });

ルールは、本来あるべきものとして追加されます。

ASP.net mvc を使用しています。

任意の提案をいただければ幸いです。

4

2 に答える 2

1

html が間違っている可能性があります。検証コードで参照するすべての入力には、name属性が必要です。したがって、これは間違っています:

<input type="text" id="StartDate" />

これは正しいです:

<input type="text" name="StartDate" id="StartDate" />

ドキュメントを参照してください:

name 属性は入力要素に '''必須''' です。検証プラグインはこれがないと機能しません。通常、name 属性と id 属性は同じ値にする必要があります。

于 2013-06-05T16:13:47.250 に答える