该错误(或功能,但我希望不是)是在 jQuery UI 的 1.8.4 版本中引入的(因此 D Hoerster 发布的演示有效,因为它使用的是 1.8.2 版本)。它的来源是由 Google 托管的this version 的第 8384 行。它是涵盖日期选择器的实际 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 显然是错误的并且在多个地方被使用。 (事实上在以前的版本中没有任何问题,尽管错误的变量被用来突出显示当前日期)我一直在看这段代码太久了,所以我不知道我是对的还是完全错了。尽管如此,对于想要进一步调查它并可能做一个错误报告的人来说,这应该是一个很好的基础。当我有时间(和我的理智恢复)时,我最终会自己做