jQuery验证添加规则

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。

欢迎提出任何建议。


1
展示 form 的渲染 HTML。在第一种情况下,当规则在 .validate() 中定义时,必须使用 name 属性作为选择器。在第二种情况下,使用 rules('add') 方法,通过 id 属性来定位字段。看到区别了吗?如果我们能够看到表单的 HTML,你的 rules 选择器是否与字段的 name 属性匹配? - Sparky
2个回答

1
很可能您的html存在问题。在验证代码中引用的每个输入都必须具有“name”属性。所以这是错误的:
<input type="text" id="StartDate" />

这是正确的:
<input type="text" name="StartDate" id="StartDate" />

请查看文档

对于输入元素,name属性是'''必需的''',否则验证插件无法工作。通常情况下,name和id属性应该具有相同的值。


这是正确的,但只有在 OP 显示他的渲染 HTML 之前才能猜测得非常准确。 - Sparky
没错,@Sparky - 对我来说似乎是唯一可能的答案,无论是否看到了HTML... 我同意这个问题可以改进! - Ryley

0

这是我的示例,它运行良好:

    $("#formControl").validate({
        rules: {
            ElementTypeUid: "required",
            InternalIdentifier: "required"
        },
        messages: {
            ElementTypeUid: "Some error message",
            InternalIdentifier: "Some error message"
        }
    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接