【问题标题】:FullCalendar disable select day if is not allowed in selectAllow callback如果在 selectAllow 回调中不允许,FullCalendar 禁用选择日期
【发布时间】:2019-10-07 09:19:50
【问题描述】:

在 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

【问题讨论】:

  • 您好,请注意,在 selectAllow 中,您使用了“selectInfo.startStr”,startStr 出现在 select 回调中,不在 selectAllow 中,请检查参数fullcalendar.io/docs/selectAllow
  • @KhurramIshaque startStr is present in select callback, in selectAllow ...我假设您的意思是“出现在 selectAllow 中”? :-)
  • 所以,基本上那段代码在 selectAllow 中不起作用
  • @KhurramIshaque "always return true" ...不,由于未定义的变量,它会导致脚本错误:-)
  • 呵呵.. 感谢 ADyson 的更正

标签: javascript fullcalendar fullcalendar-4


【解决方案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 你可能期待的解决方案

【讨论】:

  • 非常感谢您的 cmets 和解决方案。我也将您的解决方案添加到我的代码笔中。谢谢
  • 那么,基本上这个解决方案对你来说很好用吗?如果是,请标记并接受答案,谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多