2017-07-29 129 views
1

我在我的应用程序中使用'flatpickr'作为日期时间选取器。这个日期选择器允许选择多个日期,但在阅读文档后,我无法找到任何限制所选日期的最大数量的方法。Flatpickr - 限制可选日期的数量

的Jquery:

$('#gig_date_multi').flatpickr({ 
    "mode": "multiple", 
    "locale": "<%= I18n.locale %>", 
    minDate: new Date(), 
    enableTime: true, 
    time_24hr: true, 
    minuteIncrement: 15, 

    onChange: function(selectedDates, dateStr, instance) { 

     var array = selectedDates; 
     if (array.length >= 3) { 
     console.log("YOU HAVE REACHED YOUR LIMIT") 
     } else { 
     console.log("YOU CAN STILL SELECT MORE DATES") 
     } 

     var newHTML = []; 
     $.each(array, function(index, value) { 
     var formatted = moment(value).format("HH:mm - dddd Do MMMM YYYY"); 
     newHTML.push('<span>' + formatted + '</span>'); 
     }); 

     $(".multi-dates").html(newHTML.join("")); 

    } 
}); 

这里的时候,3个日期选择控制台输出“你已经达到了极限”,我想也许我可以(从先前选定的间隔)禁止所有日期时,发生这种情况。

Flatpickr有disableenable函数,但我不确定如何将它集成到代码中...我是一个jQuery初学者。

该文档显示了这两种方法;

{ 
    "disable": [ 
     function(date) { 
      // return true to disable 
      return (date.getDay() === 5 || date.getDay() === 6); 

     } 
    ], 
    "locale": { 
     "firstDayOfWeek": 1 // start week on Monday 
    } 
} 

{ 
    enable: ["2017-03-30", "2017-05-21", "2017-06-08", new Date(2017, 8, 9) ] 
} 
+0

这些是可以选择的日期范围或单个日期吗? – Cue

+0

@Cue这些是可以选择的单独日期。 –

回答

2

您可以使用:

set(option, value):设置optionto值的配置选项,重绘日历和更新,目前看来,如果必要的话

为了禁用除选定的3个人之外的所有日期可以这样写:

instance.set('enable', selectedDates); 

,并以重置您可以:

instance.set('enable', []); 

一种不同的方法可以根据Enabling dates by a function

instance.set('enable', [function(date) { 
    if (selectedDates.length >= 3) { 
     var currDateStr = FlatpickrInstance.prototype.formatDate(date, "d/m/Y") 
     var x = selectedDatesStr.indexOf(currDateStr); 
     return x != -1; 
    } else { 
     return true; 
    } 
}]); 

的片段:

$('#gig_date_multi').flatpickr({ 
 
    "mode": "multiple", 
 
    "locale": 'en', 
 
    minDate: new Date(), 
 
    enableTime: true, 
 
    time_24hr: true, 
 
    minuteIncrement: 15, 
 
    onChange: function(selectedDates, dateStr, instance) { 
 
     var selectedDatesStr = selectedDates.reduce(function(acc, ele) { 
 
      var str = FlatpickrInstance.prototype.formatDate(ele, "d/m/Y"); 
 
      acc = (acc == '') ? str : acc + ';' + str; 
 
      return acc; 
 
     }, ''); 
 
     instance.set('enable', [function(date) { 
 
      if (selectedDates.length >= 3) { 
 
       var currDateStr = FlatpickrInstance.prototype.formatDate(date, "d/m/Y") 
 
       var x = selectedDatesStr.indexOf(currDateStr); 
 
       return x != -1; 
 
      } else { 
 
       return true; 
 
      } 
 
     }]); 
 
    } 
 
});
input[type="text"] { 
 
    width: 100%; 
 
    box-sizing: border-box; 
 
    -webkit-box-sizing:border-box; 
 
    -moz-box-sizing: border-box; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<link rel="stylesheet" href="https://unpkg.com/flatpickr/dist/flatpickr.min.css"> 
 
<script src="https://unpkg.com/flatpickr"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script> 
 

 

 
<input type="text" id="gig_date_multi">

+0

虽然这似乎几乎工作,似乎有代码的错误。如果我选择3个日期,则取消选择一个,所有时间都将更改为00:00。 –

+0

@RobHughes你说得对。抱歉耽搁了。代码段已更新。让我知道。谢谢 – gaetanoM

+0

非常感谢这一点,这现在工作。 “启用”或“禁用”功能似乎删除所有时间数据。我以前更改过的代码隐藏和显示日期使用css选择器似乎工作正常,但我更喜欢你的代码,但我不明白所有。 –

相关问题