jquery UI datepicker - 禁用日期范围

Bel*_*dio 3 jquery user-interface datepicker date-range

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

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

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

数组看起来像这样:

<script> 
//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 &amp; Mrs Smith 
var cbs1 = new Date('May 27, 2011');
var cbe1 = new Date('June 5, 2011');
//Mr &amp; 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';
</script>
Run Code Online (Sandbox Code Playgroud)

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

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

最后,从这里调用的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), ''];
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我必须在这里做一些根本错误但却看不出来的东西!

mir*_*tta 10

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

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);
            }
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

还有这个:

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;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

它对我来说很好!