FullCalendar отключить выбор дня, если в обратном вызове selectAllow запрещено - PullRequest
1 голос
/ 07 октября 2019

В плагине 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 голосов
/ 07 октября 2019

ADyson распознал это правильно. Логика программы должна быть изменена. В selectAllow вы проверяли массив с помощью startStr, поэтому в основном он будет проверять только дату начала выбора, а не весь выбор. Итак, если вы пытались выбрать 14 окт-18 окт, вам нужно было проверить / сравнить запрещенные даты в этом диапазоне. Таким образом, необходимо пройти через массив 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;
    }
  }

Следуя этой логике, проверьте здесь решение, которое вы могли быожидать

...