我正在使用jQuery UI Datepicker实现一个简单的日历。在其中,我对自定义函数使用了beforeShowDay回调,因此我可以在其上突出显示不同类型的日子(工作日,银行假期等),但是,返回的类似乎未应用。这是初始化日期选择器的代码:
$('#jdatepicker').datepicker(
{
dateFormat: 'dd-mm-yyyy',
beforeShowDay: renderCalendarCallback,
onChangeMonthYear: onMonthChanged,
onSelect: onCalendarSelectedDate
}
);
这可以正常工作,并且renderCalendarCallback被调用,看起来像这样:
function renderCalendarCallback(date) {
if (initialLoad) return [true, ''];
$.each(
calendarDays.days,
function (intIndex, objValue) {
if (objValue.number == date.getDate()) {
if (objValue.dayType == NonWorkingDay) {
alert('nonworkingday - ' + date.getDate());
return [true, 'nonworkingday'];
}
else if (objValue.dayType == ModifiedWorkingDay) {
alert('modifiedday - ' + date.getDate());
return [true, 'modifiedday'];
}
else if (objValue.dayType == WorkingDay) {
alert('workingday - ' + date.getDate());
return [true, 'workingday'];
}
}
});
//Here for the default days
return [true, ''];
}
在这种方法中,calendarDays有一个名为days的数组,其中包含一些我需要突出显示的日期的信息。供您参考,这是我正在使用的示例calendarDays:
{"days":[{"i":2,"dayType":2,"number":8},{"i":4,"dayType":3,"number":12}]}
当我运行页面时,我得到相应的两个警报,告诉我我通过了ifs,因此返回的值应为:
return [true, 'nonworkingday'];
在一种情况下
return [true, 'modifiedworkingday'];
另一方面(这已得到验证,因为我可以在浏览器中看到弹出的警报。
但是,日历中的两天与默认样式完全相同。我的CSS看起来像这样:
.nonworkingday {
background-color: #F7BE81 !important;
}
.modifiedday {
background-color: #F4FA58 !important;
}
.workingday {
background-color: #ACFA58 !important;
}
如果有帮助,我使用了Google chrome开发人员工具通过日历检查了生成的表格,第8天和第12天的表格划分看起来都像这样:
<td class=" " onclick="DP_jQuery_1290097799897.datepicker._selectDay('#jdatepicker',10,2010, this);return false;"><a class="ui-state-default" href="#">8</a></td>
为什么班级是空的?它不应该有我从回调函数返回的类吗?我究竟做错了什么?
谢谢!
最佳答案
为我工作:http://jsfiddle.net/ryleyb/b6V3W/1/
因此,找出您所做的不同工作。我按照@Pointy的建议进行操作,并重新排列了calendarDays
对象,以便每个数组位置代表一个月中的某天。这样,您就可以直接跳到回调中的数组位置,而不必每天都要经过它。
var calendarDays = {
days: [
undefined, undefined,
{
"dayType": WorkingDay,
"i": 5}, // <-- this is in position 2 in the array, so it represents day 2
undefined, undefined, undefined, undefined,
{
"dayType": NonWorkingDay,
"i": 9}, // <-- position 7, 7th of the month
{
"dayType": ModifiedWorkingDay,
"i": 1} // <-- 8, etc
]
};
编辑:基于注释,如果您想覆盖背景,则CSS应该如下所示:
.nonworkingday {
background: none !important;
background-color: #F7BE81 !important;
}