jQuery UI Datepicker - отключение определенных дней - PullRequest
23 голосов
/ 24 марта 2009

Есть ли какой-нибудь (простой) способ настроить DatePicker пользовательского интерфейса jQuery, чтобы запретить выбор определенных предварительно определенных дней?

Я смог заставить этот подход работать, однако он выдает нулевую ошибку, которая не позволяет отображаться в 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',
        }); 
    });

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

Ответы [ 6 ]

14 голосов
/ 06 мая 2011

Вот способ отключить выбор определенных дат:

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 - Отключить определенные даты

9 голосов
/ 25 марта 2009

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

Также - у вас есть лишняя запятая в конце вашего определения natDays.

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

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

7 голосов
/ 25 сентября 2012

Вы можете использовать опцию 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

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

1 голос
/ 17 апреля 2012

Проблема с IE, скорее всего, заключается в следующей строке:

altField: '#alternate',
}); 

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

1 голос
/ 30 апреля 2010
beforeShowDay: $.datepicker.noWeekends,

будет

beforeShowDay: noWeekendsOrHolidays,
0 голосов
/ 15 августа 2014
 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 });

Демонстрация в реальном времени: http://jsfiddle.net/vfod0krm/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...