0

我正在使用 jquery 验证开始日期小于结束日期。如果我知道开始和结束日期元素的数量,它就可以工作。但我的问题是在我的表格中可能有很多开始和结束日期。我应该怎么做,例如下面给出的。

Start Date <input type="text" id="t1_sdate_0">
End date <input type="text" id="t1_edate_0">  

Start Date <input type="text" id="t1_sdate_1">
End date <input type="text" id="t1_edate_1">


Start Date <input type="text" id="t2_sdate_0">
End date <input type="text" id="t2_edate_0">  

Start Date <input type="text" id="t2_sdate_1">
End date <input type="text" id="t2_edate_1">

我想做类似下面的事情

          $('#sDate').datepicker(
                {gotoCurrent: true, changeMonth: true, changeYear: true, dateFormat: 'dd-M-yy', yearRange: '1850:2050',maxDate:'0'
                ,
                 onSelect: function(selected) {
                    $("#eDate").datepicker("option","minDate", selected);
                }});

        $('#eDate').datepicker(
                {gotoCurrent: true, changeMonth: true, changeYear: true, dateFormat: 'dd-M-yy', yearRange: '1850:2050',maxDate:'0'
                ,
                 onSelect: function(selected) {
                    $("#sDate").datepicker("option","maxDate", selected);
                }});
4

2 回答 2

0

虽然我没有遇到使用 jQuery 的 each() 函数的性能问题,但在某些情况下它的性能较差

考虑以下函数:

function Validate(){
    var arr = $("input[id*=sdate]");
    for(var i = 0; i< arr.length; i++)
    {
        var splittedId = arr[i].id.split('_');
        var matchingInput = $('input[id*=edate_' + splittedId[splittedId.length - 1] + ']');
        if (Date.parse($(arr[i]).val()) > Date.parse(matchingInput.val()))
                return false;
    }
    return true;
}

该实现对另一个答案有两个优点。第一个是它独立于 DOM 元素位置,这意味着您仍然可以在一对匹配的输入之间添加元素而不会失去功能(可扩展性)。其次,如果日期输入的数量很少,您可能不会注意到,但在相当极端的情况下,例如 1000 个输入,此实现返回第一个无效输入对,并且性能差异可能不会被忽视。

在此处检查实现。

快乐编码!

于 2012-12-10T20:47:32.673 回答
0

尝试这个 :

function Validate(){
      var isVallid = true;

    $("input[id*=sdate]").each(function(){          
            var nextInput = $(this).next();   
            console.log(nextInput);
            if (Date.parse($(this).val()) > Date.parse(nextInput.val()))
                  isVallid  = false;
      });

    return isVallid ;
}

检查演示

于 2012-12-10T17:58:39.707 回答