JQuery UI Datepicker - отключить определенные дни

Есть ли (простой) способ установить jQuery UI Datepicker для запрета выбора определенных, предопределенных дней?

Мне удалось получить этот подход, однако он создает нулевую ошибку, которая препятствует ее отображению в IE.

'natDays [...]. 0' является нулевым или не является объектом

Спасибо заранее!

ОБНОВЛЕНИЕ: Может быть, если я включил некоторый код, не так ли? Во всяком случае, большая часть этого была взята прямо из вышеупомянутой нити:

natDays = [
        [7, 23], [7, 24], [8, 13], [8, 14], 
    ];

    function nationalDays(date) {
        for (i = 0; i < natDays.length; i++) {
            if (date.getMonth() == natDays[i][0] - 1
            && date.getDate() == natDays[i][1]) {
                return [false, natDays[i][2] + '_day'];
            }
        }
        return [true, ''];
    }

    function noWeekendsOrHolidays(date) {
        var noWeekend = $.datepicker.noWeekends(date);
        if (noWeekend[0]) {
            return nationalDays(date);
        } else {
            return noWeekend;
        }
    }


    $(function() { 
        $("#datepicker").datepicker({
            inline: true,
            minDate: new Date(2009, 6, 6), 
            maxDate: new Date(2009, 7, 14), 
            numberOfMonths: 2, 
            hideIfNoPrevNext: true,
            beforeShowDay: $.datepicker.noWeekends,
            altField: '#alternate',
        }); 
    });

Еще раз спасибо!

Ответ 1

Вы пытались правильно объявить natDays с ключевым словом 'var' перед?

Кроме того, у вас есть дополнительная запятая в конце определения natDays.

natDays [i] [2] не будет работать, поскольку ваши массивы содержат только 2 элемента - попробуйте просто ''

Кроме того, вы хотите правильно установить имя функции beforeShowDay - не похоже, что он даже вызывает вашу настраиваемую функцию

Ответ 2

Ниже приведен способ отключения определенных дат:

var unavailableDates = ["9-5-2011","14-5-2011","15-5-2011"];

function unavailable(date) {
  dmy = date.getDate() + "-" + (date.getMonth()+1) + "-" + date.getFullYear();
  if ($.inArray(dmy, unavailableDates) < 0) {
    return [true,"","Book Now"];
  } else {
    return [false,"","Booked Out"];
  }
}

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

Источник: jQuery - Datepicker - Отключить конкретные даты

Ответ 3

Вы можете использовать опцию beforeShowDay. Мне нужно было отключить любой день после 28 числа месяца. Вот мой код.

$('.datepicker').datepicker({
    dateFormat: "yy-mm-dd",
    beforeShowDay: function(date) {
        var day = date.getDate();
        if (day > 28) {
            return [false];
        } else {
            return [true];
        }
    }
});

Подробнее об этом: http://api.jqueryui.com/datepicker/#option-beforeShowDay

Переменная даты, переданная в обратный вызов beforeShowDay, является объектом даты JavaScript, поэтому ее можно форматировать с использованием различных библиотек, временную метку можно получить с помощью date.getTime() и т.д.

Ответ 4

Проблема с IE наиболее вероятна в следующей строке:

altField: '#alternate',
}); 

Попробуйте удалить символ запятой, и он должен работать.

Ответ 5

beforeShowDay: $.datepicker.noWeekends,

будет

beforeShowDay: noWeekendsOrHolidays,

Ответ 6

 var unavailableDates = ["19-8-2014","14-9-2014"];

 function unavailable(date) {
    dmy = date.getDate() + "-" + (date.getMonth()+1) + "-" +date.getFullYear();
    if ($.inArray(dmy, unavailableDates) < 0) {
     return [true,"","Book Now"];
    } else {
  return [false,"","Booked Out"];
  }
 }

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

Live Demo: http://jsfiddle.net/vfod0krm/