根据第一个更改第二个日期选择器的 minDate

Posted

技术标签:

【中文标题】根据第一个更改第二个日期选择器的 minDate【英文标题】:change the second datepicker's minDate depending the first one 【发布时间】:2012-09-19 21:49:32 【问题描述】:

我在同一页面中有两个 datePicker,我想根据第一个更改第二个 datepicker 的 minDate。这是我的代码:

$("#datepickerDepart" ).datepicker(
        dateFormat: "mm-dd-yy", 
                minDate: 0,
        onSelect: function(dateText, inst) 
          var m = dateText.substring(0,2);
          var d = dateText.substring(3,5);
          var y = dateText.substring(6,10);
          console.log(d);
          console.log(m);
          console.log(y);
          var newDate = new Date(y,m-1,d);
          console.log(newDate);
          $('#datepickerReturn').val("");
                      $('#datepickerReturn').datepicker(
              dateFormat: "mm-dd-yy",
              minDate: newDate
          )
             
);

但是我有一个问题,第一次在第一个datePicker中选择一个日期,第二个的minDate会按照这个设置,但是当我重新选择第一个时,第二个datePicker的minDate不会再改变了,它将保留。我不知道为什么。请帮忙!!

我只想改变第二个的 minDate 只要第一个的选定日期发生变化。

【问题讨论】:

请发布您的完整代码,如果可能,请发布 jsFiddle 示例。 你见过date range demo吗?这应该会有所帮助。 【参考方案1】:

您错误地更新了第二个datepicker。我假设您之前已经初始化了第二个,尽管您发布的代码似乎没有。更新时需要使用选项语法,而不是构造函数。

http://jqueryui.com/demos/datepicker/#option-minDate

$('#datepickerReturn').val("");
$('#datepickerReturn').datepicker('option','minDate', newDate);

完整代码:

$('#datepickerReturn').datepicker(
              dateFormat: "mm-dd-yy",
              minDate: 0
          );
$("#datepickerDepart" ).datepicker(
        dateFormat: "mm-dd-yy", 
                minDate: 0,
        onSelect: function(dateText, inst) 
          var m = dateText.substring(0,2);
          var d = dateText.substring(3,5);
          var y = dateText.substring(6,10);
          console.log(d);
          console.log(m);
          console.log(y);
          var newDate = new Date(y,m-1,d);
          console.log(newDate);
          $('#datepickerReturn').val("");
          $('#datepickerReturn').datepicker('option','minDate', newDate);
      
);

【讨论】:

好的。如果您发现的内容不适合您,请随意尝试一下。【参考方案2】:
$("#strStartDate").datepicker( 
  dateFormat: 'dd/mm/yy', 
  constrainInput: true,
  firstDay: 1,
  hideIfNoPrevNext: true,
  onSelect: function()
        if ($("#strStartDate").val() > $("#strEndDate").val())
            $("#strEndDate").val($("#strStartDate").val());
        
  

);

$("#strEndDate").datepicker( 
  dateFormat: 'dd/mm/yy', 
  constrainInput: true,
  firstDay: 1,
  hideIfNoPrevNext: true,
  beforeShow: function (input, inst) 
        inst.settings.minDate = $("#strStartDate").val();
 

);

【讨论】:

【参考方案3】:

您可以使用以下代码更新 secodn datepicker 的 Mindate:

 $( "#ddate" ).datepicker(
showOn: "button",
buttonImage: base_path+"img/date_picker.png",
buttonImageOnly: true,
onSelect: function (selectedDate) 
                    $("#rdate").datepicker("option", "minDate", selectedDate);
                ,
                minDate: 'today'

); 
$( "#rdate" ).datepicker(
showOn: "button",
buttonImage: base_path+"img/date_picker.png",
buttonImageOnly: true,
  minDate: 'today'

); 

【讨论】:

以上是关于根据第一个更改第二个日期选择器的 minDate的主要内容,如果未能解决你的问题,请参考以下文章

引导日期选择器从另一个日期选择器更改 minDate/startDate

无法在momentjs中选择minDate

不能在另一个日期选择器中更改日期选择器参数?

为啥 datepicker 值没有改变?

根据下拉值设置 2 个日期选择器的最小日期和最大日期

使用 jQuery 根据第一个选择列表选项更改第二个选择列表