如何防止jQuery uidatepicker在日历的所有月份中突出显示所选(或当前)日期?

时间:2010-08-17 17:56:30

标签: jquery datepicker uidatepicker

我已多次浏览此插件的选项,似乎无法找到关闭此行为的方法:当前或所选日期在窗口小部件的所有月份中突出显示,而不仅仅是当前月份。例如,如果我选择8月17日然后提前到9月,10月等等,那么在那些月份也会选择17日,这在我看来毫无意义。我无法弄清楚为什么它会这样做,或者甚至是它背后的理由如果它是一个特征(我想这可能是次要问题)。知道怎么关掉它吗?所有月份的链接都被分配了相同的css类。以下是我正在使用的选项:

var dates = $("#checkin").datepicker({
    changeMonth: true,
    numberOfMonths: 2,
    dateFormat: 'M d, yy'
});

2 个答案:

答案 0 :(得分:2)

错误(或功能,但我希望不是)在jQuery UI的1.8.4版本中引入(因此D Hoerster发布的演示工作,因为它使用的是1.8.2版本)。它的来源位于Google托管的this version中的第8384行。它是覆盖datepicker的实际HTML生成的部分。它在一个循环中,每个月都要迭代绘制。它读取

var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));

现在,drawmonth/year是当前正在绘制的月份(duh),因此很明显会发生什么。结果就是你说明的问题 - 如果你在一个月内选择第17个,selectedDate将会当你迭代它们时,设置为每个月的17日,这些将突出显示。通过变量名称(selectedDate)判断它的语义意义应该改为陈述

var selectedDate = this._daylightSavingAdjust(new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay));

有趣的是,1.8.2版本中也存在此错误,但突出显示的代码在之前的版本中没有使用它。在1.8.2中,突出显示当前日期(如第8446行):

(printDate.getTime() == currentDate.getTime() ? ' ui-state-active' : '') + // highlight selected day

并查看代码,很明显它应该与1.8.4版本一样(使用selectedDate代替currentDate):

(printDate.getTime() == selectedDate.getTime() ? ' ui-state-active' : '') + // highlight selected day

<小时/> 所以奇怪的是没有更多的错误,因为selectedDate显然是错误的并且被用在了几个地方。 (事实上​​,在前一版本中没有任何错误,尽管使用了错误的变量来突出显示当前日期)我现在已经看了很长时间这段代码,所以我不知道我是对的还是完全错了。然而,对于想要进一步调查并可能进行错误报告的人来说,这应该是一个很好的基础。当我得到时间(并恢复理智)时,我会自己做到这一点

答案 1 :(得分:0)

你在修改CSS吗? Here's a jsFiddle我为了一个不同的SO问题而组合在一起,我为你列出的日期选择器设置修改了它。我没有看到你描述的行为。我最初的猜测是你在某处覆盖了CSS。是这样的吗?

希望这有帮助!