jQuery Datepicker beforeShowDay无效

时间:2010-11-18 16:38:17

标签: javascript jquery html css datepicker

我正在使用jQuery UI Datepicker来实现一个简单的日历。在其中我有一个回调beforeShowDay到一个自定义函数,所以我可以突出显示不同类型的日子(工作日,银行假日等),但是,我返回的类似乎没有被应用。以下是初始化datepicker的代码:

$('#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;
}

如果有任何帮助,我使用谷歌浏览器开发人员工具按日历检查生成的表格,第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>

为什么课堂空?它不应该有我从回调中返回的类吗?我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

适合我: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;
}