JQuery 根据其他动态添加的输入字段验证动态添加的输入字段
JQuery validate dynamically added input fields against other dynamically added input fields
我有多对开始日期和结束日期的输入字段:
@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++;
}
我有多对开始日期和结束日期的输入字段:
@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++;
}