Flatpickr - 限制可选日期的数量
我在我的应用程序中使用'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有disable
和enable
函数,但我不确定如何将它集成到代码中...我是一个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) ]
}
您可以使用:
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">
虽然这似乎几乎工作,似乎有代码的错误。如果我选择3个日期,则取消选择一个,所有时间都将更改为00:00。 –
@RobHughes你说得对。抱歉耽搁了。代码段已更新。让我知道。谢谢 – gaetanoM
非常感谢这一点,这现在工作。 “启用”或“禁用”功能似乎删除所有时间数据。我以前更改过的代码隐藏和显示日期使用css选择器似乎工作正常,但我更喜欢你的代码,但我不明白所有。 –
这些是可以选择的日期范围或单个日期吗? – Cue
@Cue这些是可以选择的单独日期。 –