繁体   English   中英

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 ,因此验证始终来自相同的 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++;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM