【发布时间】: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