2009-03-24 4 views
23

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

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

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

+0

вы могли бы вставить код того, что у вас есть Thats продуцирующие-й e error – TStamper

+0

Нужен образец кода, по крайней мере, для данной строки ... – Tracker1

ответ

9

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

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

natDays [я] [2] не будет работать, как ваши массивы только 2 вещи в них - попробуйте просто «»

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

+0

Хм ... просто попробовал. Не повезло.Это ошибка, которую возвращает IE: 'natDays [...]. 0' является нулевым или нет объектом – Sam

+0

См. Мое последнее изменение ... он не определен должным образом (дополнительная запятая) –

+0

Хорошо ... Я думаю мы куда-то попадаем! Дополнительная запятая исправлена ​​в IE8. Можете ли вы показать мне, что вы имеете в виду со вторым комментарием? (Я новичок в JS ... вы можете сказать?) Спасибо! – Sam

0
beforeShowDay: $.datepicker.noWeekends, 

будет

beforeShowDay: noWeekendsOrHolidays, 
14

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

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 }); 

Source: jQuery - Datepicker - Disable Specific Dates

1

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

altField: '#alternate', 
}); 

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

6

Вы можете использовать опцию 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, поэтому он может быть отформатирован с использованием различных библиотек, отметка времени может быть получена с помощью даты. GetTime() и т.д.

+0

whoto использовать с помощью кнопки после выбора? –

+0

@WHK Извините, но я не понимаю ваш вопрос. –

0
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/

Смежные вопросы