javascript - 使用 Jquery 比较两个日期 N 次

标签 javascript jquery html

这里使用了一个名为 to[0] 的字段...但实际上我将它们“N”次,索引中的+1(to[1]、to[2] 等)..这是由于生成的克隆... from[0] 也是如此。 from[0] 是开始日期,to[0] 是结束日期。 我正在比较这两个日期,确保结束日期不小于开始日期。 这里前 2 个代码块工作正常,因为每个代码块都针对一行。但是每当我尝试使其成为“N”行时,它就不起作用,即最后一个代码块不起作用。

我没有办法选择这些元素,因为名称是动态生成的...

Jquery 代码是:

    $(document).ready(function() {
                $("input[name='to[0]']").blur( function() {
                    if ($("input[name='to[0]']").val() != 'To' && $("input[name='from[0]']").val() != 'From') {
                        var a1 = $("input[name='from[0]']").val();
                        var b1 = $("input[name='to[0]']").val();
                        alert(b1);alert(a1);
                        if (a1 > b1) {
                                    alert("Invalid Date Range!\nStart Date cannot be after End Date!");
                        }
                    }
                });
                $("input[name='to[1]']").blur( function() {
                    if ($("input[name='to[1]']").val() != 'To' && $("input[name='from[1]']").val() != 'From') {
                        var a1 = $("input[name='from[1]']").val();
                        var b1 = $("input[name='to[1]']").val();
                        alert(b1);alert(a1);
                        if (a1 > b1) {
                                    alert("Invalid Date Range!\nStart Date cannot be after End Date!");
                        }
                    }
                });
                $("td.date").click( function() {
                    var n = $('#table2 tbody>tr').length - 2;
                    var r=2;
                    $("td.date>input:first").next().blur( function() {
                        while(r<n) {
                            if ($("input[name='to[r]']").val() != 'To' && $("input[name='from[r]']").val() != 'From') {
                                var a1 = $("input[name='from[r]']").val();
                                var b1 = $("input[name='to[r]']").val();
                                alert(b1);alert(a1);
                                if (a1 > b1) {
                                            alert("Invalid Date Range!\nStart Date cannot be after End Date!");
                                }
                            }
                            r++;
                        }
                    });
                });

HTML 是..

 <td width="15%" align="center" >
            <input class="f" style="width:70px" type="text" size="12" name="from[0]"  value="From" readonly="readonly"  />
            <a class="datepicker" href="#"><img alt="Pick a date" src="js/date.gif" border="0" width="17" height="16" /></a>
         </td>
         <td width="15%" align="center" >
            <input style="width:70px" class="f" type="text" size="12" name="to[0]" value="To" readonly="readonly" />
              <a class="datepicker" href="#"><img alt="Pick a date" src="js/date.gif" border="0" width="17" height="16" /></a>
         </td>

  <td width="15%" align="center" class="date" >
            <input style="width:70px" type="text" size="12" name="from[1]"  value="From" readonly="readonly"  />
            <a class="datepicker" href="#"><img alt="Pick a date" src="js/date.gif" border="0" width="17" height="16" /></a>
         </td>
         <td width="15%" align="center" class="date" >
            <input style="width:70px" class="f" type="text" size="12" name="to[1]" value="To" readonly="readonly" />
              <a class="datepicker" href="#"><img alt="Pick a date" src="js/date.gif" border="0" width="17" height="16"  /></a>
         </td>

包含 from[1] 和 to[1] 的 td 的最后一行正在被克隆,之后最后一行被克隆...

最佳答案

只需更改您的选择器,然后您无需重复代码。试试这个:

//^= means name starts with, so we are selecting all inputs with that matcher
$("input[name^='to['").blur( function() {
    //first we get the name in a variable (just for shortness)
    var thisName = $(this).prop("name");
    //we then get the numbered index, by splitting the id of the current item
    var index = thisName.substring(thisName.indexOf("[") + 1).replace("]", "");
    //based on the index, we now can get the corresponding "from" field
    var correspondingFromField = $("input[name='from[" + index + "]']");
    //now we just do your logic:
    if ($(this).val() != 'To' && correspondingFromField.val() != 'From') {
        var a1 = correspondingFromField.val();
        var b1 = $(this).val();
        alert(b1);alert(a1);
        if (a1 > b1) {
            alert("Invalid Date Range!\nStart Date cannot be after End Date!");
        }
    }
});

关于javascript - 使用 Jquery 比较两个日期 N 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10652102/

相关文章:

html - 使用 CSS 将文本溢出到边距

javascript - 如何设置站点/视口(viewport)的最小宽度,并在宽度低于该宽度时使用浏览器缩放

javascript - 在任何输入更改上发布表单,它包含动态更改的隐藏输入类型

javascript - 为什么我的 for 循环卡在第二个选项上?

javascript - Aurelia官方联系人列表教程添加Bootstrap配置后渲染失败

javascript - D3 嵌套 - 层数不一致

javascript - 浏览器上的 Canvas.measureText 差异很大

javascript - jQuery Accordion 导航菜单

jquery - 能否使用 jQuery 的 $(responseXML) 语法可靠地解析 XML?

php - 使用 MySQL 查询选择不同的选择选项时显示不同的潜水