如果在selectAllow回调中不允许使用FullCalendar禁用选择日期

时间:2019-10-07 09:19:50

标签: javascript fullcalendar fullcalendar-4

在FullCalendar插件中,我需要允许选择直到一天或几天之间的日期。我举了一个例子来更好地解释。

https://codepen.io/stefanmalex/pen/Jjjjgmp

我有一个日期不允许的数组:

var disallowedDays = ['2019-10-17', '2019-10-23', '2019-10-26']

我添加了“ selectAllow”回调:

selectAllow: function (selectInfo) {
  if (disallowedDays.includes(selectInfo.startStr)) {
    return false;
  }
  return true;
}

如果您每天选择一天,这将非常有效,允许选择数组中所有天数少于不允许的天数。

问题:当您选择多个日期时,它允许选择不允许的日期。 (例如:从“ 2019-10-15”到“ 2019-10-26”中选择)。

我需要的示例: 如果选择从'2019-10-11'开始,则必须选择直到'2019-10-16',因为不允许第二天('2019-10-17')。

我将示例放在Codepen上。 https://codepen.io/stefanmalex/pen/Jjjjgmp

1 个答案:

答案 0 :(得分:1)

ADyson已正确识别它。 程序逻辑需要更改。 在selectAllow中,您正在使用startStr检查数组,因此基本上它将仅检查选择的开始日期,而不检查整个选择的开始日期。 因此,如果您尝试选择14 oct到18 oct,则需要检查/比较此范围内的不允许日期。 因此,需要遍历disallowedDays数组以检查尝试的选择中的每个日期,例如以下循环:

for(var i=0;i<disallowedDays.length;i++)   {
    var dd = new Date(disallowedDays[i]);
    if(dd.getTime() >= startDate.getTime() && dd.getTime() <= endDate.getTime()){
        return true;
    }
  }

按照此逻辑,check here您可能期望的解决方案