【问题标题】:how to change the datepicker date based on first date picker in jquery如何根据jquery中的第一个日期选择器更改日期选择器日期
【发布时间】:2019-04-02 05:50:51
【问题描述】:

我有两个日期选择器

我需要设置添加条件基于 第一个日期选择器

如果第一个日期选择器选择了当前日期,那么应该是

第二个日期选择器将在日期选择器中选择的下一个日期之后选择 - 1

<input type="text" id="datepicker"/>

<input type="text" id="datepicker2"/>
$(function() {
    $( "#datepicker1" ).datepicker({
    minDate:0,
    dateFormat: "yy-mm-dd" });

});

$(function() {
    $( "#datepicker2" ).datepicker({
    dateFormat: "yy-mm-dd" });

});

我可以在 jquery 中怎么做??

Datepicker - 1

【问题讨论】:

  • "第二个日期选择器只显示在日期选择器-1中选择的下一个"你能解释一下吗
  • 在第一个日期选择器中我选择了 05-04-2019 然后第二个日期选择器将仅在 05-04-2019 之后显示
  • $(function() { 是一个文档就绪事件处理程序。您只需要其中一个,并且可以将两者都包装在那个而不是两个中。如果您准确引用哪个日期选择器或标记您的问题,例如使用 jQuery UI,您的问题会更清楚。如果您在问题中创建完整的、功能正常的 sn-ps 也会有所帮助。
  • 这些答案是否解决了您的问题?如果是这样,请通过单击该答案左侧的复选标记来标记该答案。如果不是,请在您的问题中添加更多详细信息,或对每个问题进行评论,说明为什么它不能回答您的问题。

标签: javascript jquery datepicker onchange


【解决方案1】:

将onSelect 处理程序设置为第一个日期选择器,在第二个日期选择器的处理程序更新minDate option 内。其中使用getDate方法获取选中的Date对象。

$(function() {
  let $dt1 = $("#datepicker1").datepicker({
    minDate: 0,
    dateFormat: "yy-mm-dd",
    // attach handler
    onSelect: function(dateString, instance) {
      // update minDate option of second datepicker
      // create a Date instance using datepicker instance
      // where increment the day value
      // $dt2.datepicker('option', 'minDate', new Date(instance.selectedYear, instance.selectedMonth, ++instance.selectedDay));

      // or you can get Date from jQuery object
      // or get jquery instance from instance
      // like : instance.input or $("#datepicker1")

      let date = $dt1.datepicker('getDate');
      // or let date = instance.input.datepicker('getDate');

      // increment day
      date.setDate(date.getDate() + 1)

      $dt2.datepicker('option', 'minDate', date);
      // to set min date as datepickers 1 value simply use
      // $dt2.datepicker('option', 'minDate', dateString );

      // incrementing day from a customized data string is hard that's the reason for using datepicker instance
    }
  });

  // cache the reference of input element
  var $dt2 = $("#datepicker2").datepicker({
    dateFormat: "yy-mm-dd"
  });
});
<link href="https://code.jquery.com/ui/1.11.4/themes/black-tie/jquery-ui.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
<input type="text" id="datepicker1" />

<input type="text" id="datepicker2" />

【讨论】:

  • 如何根据第一个日期选择器更改第二个日期选择器 minDate 是下一个日期
  • @prabhakaran7:等待
  • 太棒了,你能请教一下这条线是如何工作的 $dt2.datepicker('option', 'minDate', new Date(instance.selectedYear, instance.selectedMonth, ++instance.selectedDay))
  • @prabhakaran7 :onSelect callbavk 中的第二个参数是指 datepicker 实例对象,它将值作为属性......不是 minDate opyion 接受 Date 对象作为值,所以我正在创建一个 Date 对象实例通过传递年、月和日,其中日值只是递增(++日)并传递给设置下一天
  • 为什么要一个新的日期和所有的细节,而不是只使用第一个选择器的值?
【解决方案2】:

我还会考虑保持第二个(依赖)datepicker 处于禁用状态,直到第一个具有更好地强制关系的值。我添加了data-dependent 以避免硬编码,但这只是选择。

这里我使用了onSelect,但如果需要,它可以是另一个事件。

我还修复了您在选择器中为第一个元素设置的 ID。

$(function() {
  $("#datepicker").datepicker({
    minDate: 0,
    dateFormat: "yy-mm-dd",
    onSelect: function(date, datepicker) {
      let dependent= $(this).data('dependent');
      let thisDate = $(this).val();
      $(dependent).datepicker("option", "minDate", thisDate);
      $(dependent).datepicker('refresh');
    }
  });
  $("#datepicker2").datepicker({
    dateFormat: "yy-mm-dd"
  });
});
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

<input type="text" id="datepicker" data-dependent="#datepicker2" />
<input type="text" id="datepicker2" />

【讨论】:

    【解决方案3】:

    选择你刚刚设定的第一个日期 -

    $( "#datepicker2" ).datepicker({ minDate: <selected date from 1>});
    

    例如

    $( "#datepicker2" ).datepicker({ minDate: new Date('05/05/2019')});这将仅显示 2019 年 5 月 5 日之后的日期

    【讨论】:

    • 我喜欢这个,但是你是怎么得到第一个日期值的?
    • 您可以将 onchange 事件绑定到 datepicker1。
    【解决方案4】:
    let dateMin = new Date(<?= date('Y,n,d', mktime(0,0,0,date('n')-1, date('d'), date('y'))); ?>);
    let dateFinish = new Date(<?= date('Y,n,d', mktime(0,0,0,date('n')-1, date('d')+7, date('y'))); ?>);
    
    $('#date-start').datetimepicker({
        format: 'DD-MM-YYYY',
        minDate: dateMin,
        maxDate: dateFinish
    });
    $('#date-finish').datetimepicker({
        format: 'DD-MM-YYYY',
        minDate: dateMin
    });
    

    【讨论】:

    • 欢迎来到 StackOverflow。虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加上下文将提高​​答案的长期价值。
    【解决方案5】:

    您需要调用一个函数,在其中定义两个日期选择器,如下所示:

    function reinitialize()
    {
      $("#datepicker1").datepicker('destroy');
      $('#datepicker1').datepicker({
        onSelect: reinitialize,
        defaultDate: new Date($("#datepicker1").val())
      });
      $("#datepicker2").datepicker('destroy');
      $('#datepicker2').datepicker({
        minDate: new Date($("#datepicker1").val()), // use min date
        defaultDate: new Date($("#datepicker2").val())
      });
    }
    

    【讨论】:

    • 在函数中使用refresh 会比destroy 更好吗? api.jqueryui.com/datepicker/#method-refresh 或许将datepicker 的初始实例添加为该函数之外的一部分。
    • 这个函数不会也删除原始日期选择器的状态,因为它在收到选择事件时被销毁?
    猜你喜欢
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 2015-04-02
    • 2020-03-17
    相关资源
    最近更新 更多