【问题标题】:jquery validation add rulesjquery验证添加规则
【发布时间】:2013-06-05 03:45:45
【问题描述】:

我在 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。

任何建议都非常感谢。

【问题讨论】:

  • 显示form的渲染HTML。在您的第一种情况下,当rules.validate() 中定义时,您必须使用name 属性作为选择器。在第二种情况下,使用 rules('add') 方法,您将通过其 id 属性定位您的字段。看到不同?如果我们可以看到表单的 HTML,您的 rules 选择器会匹配字段的 name 属性吗?

标签: jquery asp.net-mvc jquery-validate


【解决方案1】:

您的 html 可能是错误的。您在验证代码中引用的每个输入都必须具有 name 属性。所以这是错误的:

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

这是对的:

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

documentation

对于输入元素,name 属性是 '''required''', 没有它验证插件就无法工作。通常是姓名和身份证 属性应该具有相同的值。

【讨论】:

  • 这是真的,但在 OP 显示他呈现的 HTML 之前,这只是一个很好的猜测。
  • 没错,@Sparky - 对我来说似乎是唯一可能的答案,不管看到 HTML...我同意这个问题可以改进!
【解决方案2】:

这是我的例子,它工作正常:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 2016-02-07
    • 2020-12-29
    相关资源
    最近更新 更多