Нужно включить несколько дней из уже отключенных выходных в DatePicker - PullRequest
0 голосов
/ 08 ноября 2018

Я отключил все выходные дни в jQuery datepicker. Теперь есть требование, чтобы я включил несколько выходных.

Я попытался добавить эти даты в массив, а затем включить их, но это не работает. Ниже приведен код, который отлично работает для отключения выходных, но я не могу включить нужные мне даты. Любая помощь будет высоко ценится!

$(window).load(function() {
  var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
  var availableDates = ["2018/12/22", "2018/12/23"]; // yyyy/MM/dd
  var unavailableDates = ["2018/12/25", "2018/12/26", "2018/12/27"]; // yyyy/MM/dd
  var unavailableDays = ["Saturday", "Sunday", "Monday"];

  function unavailable(date) {
    ymd = date.getFullYear() + "/" + ("0" + (date.getMonth() + 1)).slice(-2) + "/" + ("0" + date.getDate()).slice(-2);
    day = new Date(ymd).getDay();
    if ($.inArray(ymd, unavailableDates) < 0 && $.inArray(days[day], unavailableDays) < 0 && $.inArray(ymd, availableDates) < 1) {
      return [true, "enabled", "Order now"];
    } else {
      return [false, "disabled", "Delivery not available on this date"];
    }
  }

  $('#date').datepicker({
    beforeShowDay: unavailable
  });
});

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

Вам нужно немного подправить свое состояние, чтобы оно работало на доступные и недоступные даты. Поместите предложение о доступных датах в OR условие

function unavailable(date) {

    ymd  = date.getFullYear() + "/" + ("0" + (date.getMonth() + 1)).slice(-2) + "/" + ("0" + date.getDate()).slice(-2); 
    day = new Date(ymd).getDay();

    if (($.inArray(ymd, unavailableDates) < 0 && $.inArray(days[day], unavailableDays) < 0)
         || $.inArray(ymd, availableDates) >= 0) {
      return [true, "enabled", "Order now"];
    } else {
      return [false, "disabled", "Delivery not available on this date"];
    }
} 

Рабочая скрипка

0 голосов
/ 08 ноября 2018

Полагаю, availableDates должно переопределить другое условие в выходные дни и unavailableDates ...

Так сделай, если есть отдельное условие. Если значение равно true, просто return (поэтому второе условие не будет оцениваться).

$(window).load(function() {
  var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
  var availableDates = ["2018/12/22", "2018/12/23"]; // yyyy/MM/dd
  var unavailableDates = ["2018/12/25", "2018/12/26", "2018/12/27"]; // yyyy/MM/dd
  var unavailableDays = ["Saturday", "Sunday", "Monday"];

  function unavailable(date) {
    ymd = date.getFullYear() + "/" + ("0" + (date.getMonth() + 1)).slice(-2) + "/" + ("0" + date.getDate()).slice(-2);
    day = new Date(ymd).getDay();

    if($.inArray(ymd, availableDates) >= 0){   // Evaluate availableDates first
      return [true, "enabled", "Order now"];
    }

    if ($.inArray(ymd, unavailableDates) < 0 && $.inArray(days[day], unavailableDays) < 0) {
      return [true, "enabled", "Order now"];
    } else {
      return [false, "disabled", "Delivery not available on this date"];
    }
  }

  $('#date').datepicker({
    beforeShowDay: unavailable
  });
});
...