jQuery UI根据开始日期在范围内选择开始和结束日期

前端之家收集整理的这篇文章主要介绍了jQuery UI根据开始日期在范围内选择开始和结束日期前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在jQuery ui中构建一个日期选择器.我要做的是设置一个范围,所以当他们选择第一个日期时,第二个日期出现并给出一个30天的窗口.我尝试了这个但它不起作用(它允许用户从今天开始30天,而不是从开始日期开始30天):
  1. var pickDate;
  2. $( "#datepickerEnd" ).hide();
  3. $( "#datepickerStart" ).datepicker();
  4. $( "#datepickerStart" ).change(function(){
  5. var pickDate = $( "#datepickerStart" ).val();
  6. $( "#datepickerEnd" ).datepicker({ minDate: pickDate,maxDate: +30 });
  7. $( "#datepickerEnd" ).show();
  8. })

我遇到的另一个问题是当我更改datepickerStart时,它只会设置一次起始范围,但不会每次更改它.我必须刷新页面才能锁定新的开始日期.

解决方法

在这里检查这个 jsfiddle.这是你问题的一个有效例子.

HTML

  1. <input type="text" id="dt1">
  2. <input type="text" id="dt2">

JS

  1. $(document).ready(function () {
  2. $("#dt1").datepicker({
  3. dateFormat: "dd-M-yy",minDate: 0,onSelect: function () {
  4. var dt2 = $('#dt2');
  5. var startDate = $(this).datepicker('getDate');
  6. //add 30 days to selected date
  7. startDate.setDate(startDate.getDate() + 30);
  8. var minDate = $(this).datepicker('getDate');
  9. var dt2Date = dt2.datepicker('getDate');
  10. //difference in days. 86400 seconds in day,1000 ms in second
  11. var dateDiff = (dt2Date - minDate)/(86400 * 1000);
  12.  
  13. //dt2 not set or dt1 date is greater than dt2 date
  14. if (dt2Date == null || dateDiff < 0) {
  15. dt2.datepicker('setDate',minDate);
  16. }
  17. //dt1 date is 30 days under dt2 date
  18. else if (dateDiff > 30){
  19. dt2.datepicker('setDate',startDate);
  20. }
  21. //sets dt2 maxDate to the last day of 30 days window
  22. dt2.datepicker('option','maxDate',startDate);
  23. //first day which can be selected in dt2 is selected date in dt1
  24. dt2.datepicker('option','minDate',minDate);
  25. }
  26. });
  27. $('#dt2').datepicker({
  28. dateFormat: "dd-M-yy",minDate: 0
  29. });
  30. });

正如soderslatt已经提到的那样使用onSelect选项来设置日期.
我使用的其他方法是:

> getDate
> setDate
> minDate
> maxDate

我认为他们都非常自我解释,文档可以帮助您了解它们的工作原理.
如果要将第二个日期选择器的日期设置为dt1的日期1天,请执行与此行相同的操作:

  1. startDate.setDate(startDate.getDate() + 30);

但当然要加1天而不是30天.

猜你在找的jQuery相关文章