jquery UI datepicker - 禁用日期范围
我努力工作 - 我得到一个'Uncaught TypeError:无法读取属性'0'未定义的错误与下面,我不明白为什么!jquery UI datepicker - 禁用日期范围
我想在假日小屋的网站上使用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 & 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';
</script>
我有以下的功能,我从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);
}
});
}
});
最后,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), ''];
}
});
}
我必须b e在这里做一些根本性的错误,但我看不到什么!
今天是最低日期 - 这就是为什么我认为0d会工作! – BellamyStudio 2011-02-25 12:22:11
0d似乎工作正常 - 我已经评论了我的其他东西,留下了minDate声明,日历显示正常。 – BellamyStudio 2011-02-25 12:24:33
相当一个老问题,但我经历了同样的问题了,降落在这里寻找一个解决方案,然后由我自己解决更加关注到documentation:
beforeShowDay - function(date) The function takes a date as a parameter and must return an array with [0] equal to true/false indicating whether or not this date is selectable, 1 equal to a CSS class name(s) or '' for the default presentation, and [2] an optional popup tooltip for this date. It is called for each day in the datepicker before it is displayed.
所以,仅仅为了保险起见,我会明确地改写原单问题的代码像这样:
$('#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;
}
});
}
它的工作对我很好!
为什么没有选择答案?这是一个很棒的解决方案。 – emc 2012-01-19 11:59:55
男人,你真的救了我的一天,谢谢! – 2013-02-23 02:28:45
究竟哪里出错?你使用'console.log'一步一步地调试代码 – diEcho 2011-02-25 11:11:15
我在beforeShowDay事件后得到了'Uncaught SyntaxError:意外的标识符' – BellamyStudio 2011-02-25 13:21:50