选择开始日期后自动更改结束日期

时间:2019-04-23 03:46:27

标签: javascript

所以在这种情况下,屏幕如下所示:

enter image description here

我试图将结束日期始终比开始日期大7天。因此,当我将开始日期更改为isWaypointReached时,那么结束日期应为2019-05-01,依此类推。

我正在使用datepicker库来完成这项工作。

代码:

2019-05-08

我实现了onchange函数以使其正常工作,但是没有任何变化,我做错了什么吗?

我的日期选择器的屏幕截图:

enter image description here

2 个答案:

答案 0 :(得分:2)

或者,您可以使用提供的$('#[start/end datepicker id]').change来收听.on("change", function()

Fiddle或以下代码段:

var interval = 7;
    $(function() {
      $("#sdatepicker").datepicker({
        minDate: 0,
        maxDate: interval
      });

      $("#edatepicker").datepicker({
        minDate: 0
      });

      var today = new Date();
      var target = new Date(today.getFullYear(), today.getMonth(), today.getDate() + interval);
      $("#sdatepicker").datepicker("setDate", today);
      $("#edatepicker").datepicker("setDate", target);

      $("#sdatepicker").datepicker({
        changeMonth: true,
        changeYear: true,
        showOn: 'button',
        buttonImage: '../../../images/calendar.png',
        buttonImageOnly: true,
        title: 'Click to open calendar',
        alt: 'Click to open calendar'
      }).on("change", function() {
        var start = $("#sdatepicker").datepicker("getDate");
        start.setDate(start.getDate() + interval);
        $("#edatepicker").datepicker("setDate", start);
        $("#edatepicker").datepicker("option", "minDate",
          $("#sdatepicker").datepicker("getDate"));
      });

      $("#edatepicker").datepicker({
        changeMonth: true,
        changeYear: true,
        showOn: 'button',
        buttonImage: '../../../images/calendar.png',
        buttonImageOnly: true,
        title: 'Click to open calendar',
        alt: 'Click to open calendar'
      }).on("change", function() {
        var start = $("#sdatepicker").datepicker("getDate");
        $("#sdatepicker").datepicker("setDate", start);
        $("#sdatepicker").datepicker("option", "maxDate",
          $("#edatepicker").datepicker("getDate"));
      });
    });
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

<p>Start Date: <input type="text" id="sdatepicker"></p>
<p>End Date: <input type="text" id="edatepicker"></p>

说明:

minDate用于防止选择过去的日期。今天是0。

使用时间间隔,您可以在更改了其中的任何一个时以固定的时间间隔更新开始/结束日期,并且要限制结束日期不能小于开始日期 并且开始日期不能大于结束日期,您可以结合使用maxDateminDate

$("#edatepicker").datepicker("option", "minDate", $("#sdatepicker").datepicker("getDate"));

和:

$("#sdatepicker").datepicker("option", "maxDate", $("#edatepicker").datepicker("getDate"));

更新

以下fiddle显然解决了OP问题discussed。片段:

var interval = 7;
$(function() {
  var start;
  var today = new Date();
  var target = new Date(today.getFullYear(), today.getMonth(), today.getDate() + interval);
  $(".txtStartDate").datepicker("setDate", today);
  $(".txtEndDate").datepicker("setDate", target);

  $(".txtStartDate").datepicker({
    minDate: 0,
    changeMonth: true,
    changeYear: true,
    showOn: 'button',
    buttonImage: '../../../images/calendar.png',
    buttonImageOnly: true,
    title: 'Click to open calendar',
    alt: 'Click to open calendar',
    onSelect: function() {
      start = $(this).datepicker("getDate");
      start.setDate(start.getDate() + interval);
      $(".txtEndDate").datepicker("setDate", start);
      $(".txtEndDate").datepicker("option", "minDate",
        $(this).datepicker("getDate"));
      $(this).change();
    }
  }).on("change", function() {
    $(".txtEndDate").datepicker("setDate", start);
    $(".txtEndDate").datepicker("option", "minDate",
      $(this).datepicker("getDate"));
  });

  $(".txtEndDate").datepicker({
    minDate: 0,
    changeMonth: true,
    changeYear: true,
    showOn: 'button',
    buttonImage: '../../../images/calendar.png',
    buttonImageOnly: true,
    title: 'Click to open calendar',
    alt: 'Click to open calendar'
  });
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

<p>Start Date: <input type="text" class="txtStartDate"></p>
<p>End Date: <input type="text" class="txtEndDate"></p>

$(".txtEndDate").datepicker("option","minDate", start.getDate())

因为

而不起作用

var start = $(".txtStartDate").datepicker("getDate");被初始化,然后更新为start.setDate(start.getDate() + interval);

这意味着start.getDate()不会导致$(".txtStartDate").datepicker("getDate");

$(".txtEndDate").datepicker("option", "minDate", $(".txtStartDate").datepicker("getDate"));工作期间。

另外,显然上个月不会调用onchangeonselect来设置结束日期,而两次调用它们并且提前初始化var start;会:

onSelect: function() {
      start = $(this).datepicker("getDate");
      start.setDate(start.getDate() + interval);
      $(".txtEndDate").datepicker("setDate", start);
      $(".txtEndDate").datepicker("option", "minDate",
        $(this).datepicker("getDate"));
      $(this).change();
    }
  }).on("change", function() {
    $(".txtEndDate").datepicker("setDate", start);
    $(".txtEndDate").datepicker("option", "minDate",
      $(this).datepicker("getDate"));
  });

答案 1 :(得分:1)

不要使用输入的change事件。使用日期选择器的onSelect选项,当您从日期选择器中选择一个日期时,它将运行一个回调。

并且您应该使用另一个日期选择器的setDate()方法来更改其日期。

  $(".txtStartDate").datepicker({
    changeMonth: true,
    changeYear: true,
    showOn: 'button',
    buttonImage: '../../../images/calendar.png',
    buttonImageOnly: true,
    title: 'Click to open calendar',
    alt: 'Click to open calendar',
    onSelect: function(value, dp) {
      var interval = 7;
      var start = dp.datepicker("getDate");
      start.setDate(start.getDate() + interval);
      $(".txtEndDate").datepicker("setDate", start);
    }
  });