jquery UI datepicker – 禁用日期范围

我正在努力让一些工作 – 我得到一个’未捕获的TypeError:无法读取未定义’属性’0’的错误与下面的错误,我无法弄清楚为什么!

我正在尝试在网站上使用jQuery UI datepicker用于度假小屋以指示可用性和季节(低,高等)。 我有一个datePicker事件的function来检查是否有预约日期,如果没有,我会去看看我们在哪个季节(在非旺季预订可以在周一或周五进行。在旺季,只有星期五。)

我正在使用cms生成一些日期数组(通过循环),然后我可以在构建日历时迭代,所以javascript有点冗长。

数组看起来像这样:

 //Peak Season 1 2011 var ps1 = new Date('June 17, 2011'); var pe1 = new Date('September 2, 2011'); //Peak Season 2 2011 var ps2 = new Date('December 19, 2011'); var pe2 = new Date('January 6, 2012'); // season start and end date arrays var peakStart = new Array(ps1,ps2); var peakEnd = new Array(pe1,pe2); // Bookings //Mr & Mrs Smith var cbs1 = new Date('May 27, 2011'); var cbe1 = new Date('June 5, 2011'); //Mr & Mrs Jones var cbs2 = new Date('September 1, 2011'); var cbe2 = new Date('September 18, 2011'); var cottageStart = new Array(cbs1,cbs2); var cottageEnd = new Array(cbe1,cbe2); // last date of season - don't book past here var lastDate = '01/06/2012';  

我从beforeShowDate事件调用以下函数来检查预订数组的日历日期:

 $('#cottageCal').datepicker({ minDate: '0d', maxDate: lastDate, beforeShowDay: function(date) { $.each(cottageStart, function(key, value) { //alert (((date >= value) && (date = value) && (date <= value)) { return [false, 'booked']; } else { return checkPeak(date); } }); } }); 

最后,从这里调用的checkPeak函数如下所示:

 var checkPeak = function(date) { var day = date.getDay(); var month = date.getMonth(); $.each(peakStart, function(key, value) { if ((date > value) && (date < value)) { /* december peak bookings on monday*/ if (month != 11) { return [(day == 5), '']; } else { return [(day == 1), '']; } } if (month == 0) { return false; } else { // it's not during a peak period return [(day == 1 || day == 5), '']; } }); } 

我必须在这里做一些根本错误的事情,但我看不到什么!

相当古老的问题,但我遇到了同样的问题,在这里寻找解决方案,然后我自己解决了更多的注意文档 :

beforeShowDay – function(date)该函数将日期作为参数,并且必须返回一个数组,其中[0]等于true / false,表示此日期是否可选 , 1等于CSS类名称或”对于默认演示文稿,[2]为此日期提供可选的弹出工具提示。 在显示日期选择器之前,它会在每天被调用。

所以,为了确保,我会像这样明确地重写原始问题的代码:

 $('#cottageCal').datepicker({ minDate: '0d', maxDate: lastDate, beforeShowDay: function(date) { $.each(cottageStart, function(key, value) { if ((date >= value) && (date <= value)) { return new Array(false, 'booked'); } else { return checkPeak(date); } }); } }); 

还有这个:

 var checkPeak = function(date) { var day = date.getDay(); var month = date.getMonth(); var returnArr = new Array(); $.each(peakStart, function(key, value) { if ((date > value) && (date < value)) { /* december peak bookings on monday*/ if (month != 11) { returnArr[0] = (day == 5); returnArr[1] = ''; return returnArr; } else { returnArr[0] = (day == 1); returnArr[1] = ''; return returnArr; } } if (month == 0) { returnArr[0] = false; return returnArr; } else { // it's not during a peak period returnArr[0] = (day == 1 || day == 5); returnArr[1] = ''; return returnArr; } }); } 

它对我来说很好!

@Penzizzle

你需要什么最小日期? 0dminDate:无效minDate:

要么设置minDate:'-1d'

参考参考