我有多对输入字段,用于开始和结束日期:
@foreach (var exam in exams){
<input type="date" data-val="true" required id="StartDate" value="exam.StartDate">
<input type="date" data-val="true" data-val-endError="Can't be before start date" required>
}
我正在使用jQuery的validator.AddMethod来验证结束日期在开始日期之后:
$.validator.addMethod("endError",
function (value, element, params) {
var startDate = $("#StartDate").on('input').val();
if (value.toString() <= startDate) {
return false;
} else {
return true;
}
});
$.validator.unobtrusive.adapters.addBool("endError");
问题是验证总是将结束日期与第一个开始日期进行比较。我希望将每个结束日期与其相关的开始日期进行比较。
我仍然是JavaScript的新手,但我知道这可能是由于所有startDate输入的ID相同而导致的,这是非法的html。
有没有办法来解决这个问题?谢谢!
您的代码的问题是您始终引用相同的ID,StartDate
因此其正常验证总是从相同的开始日期开始。如果您有很多相同的ID,则ID的搜索始终会始终从头开始。
@foreach (var exam in exams){
<input type="date" data-val="true" required id="****StartDate*****" value="exam.StartDate">
<input type="date" data-val="true" data-val-endError="Can't be before start date" required>
}
并且您为不同的标签使用了相同的ID,但在html中效果不好。
在验证器中,您引用StartDate ID
var startDate = $("#StartDate").on('input').val();
一种解决方案是创建一个索引的id:
@{int i=1;}
@foreach (var exam in exams){
<input type="date" data-val="true" required id="StartDate@(i)" value="exam.StartDate">
<input type="date" data-val="true" data-val-endError="Can't be before start date" required>
i++;
}
您可以使验证器捕获正确的ID。
我建议您data-id
例如创建一个属性,然后将StarDate的ID放入:因此在验证器中,您将捕获正确日期的ID
$.validator.addMethod("endError", function (value, element, params) {
var idstartDate = $(element).attr("data-id");
var startDate= $(idstartDate).on('input').val();
:
然后您修改循环:
@{int i=1;}
@foreach (var exam in exams){
<input type="date" data-val="true" required id="StartDate@(i)" value="exam.StartDate">
<input type="date" data-id="#StartDate@(i)" data-val="true" data-val-endError="Can't be before start date" required>
i++;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句