Ошибка (или функция, но я надеюсь, что это не так) была введена в версии jQuery UI 1.8.4 (следовательно, демоверсия, опубликованная D Hoerster, работает, поскольку она использует версию 1.8.2). Его источник находится в строке 8384 в этой версии , размещенной в Google. Это часть, охватывающая генерацию фактического HTML-кода средства выбора даты. Это внутри цикла, который повторяется каждый месяц. Читается
var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
Теперь, drawmonth/year
- это текущий текущий месяц (дух), так что довольно очевидно, что происходит. В результате ваша заявленная проблема - если вы выберете 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
, по-видимому, неверно и используется в нескольких местах. (И тот факт, что в предыдущей версии не было ничего плохого, несмотря на неправильную переменную, используемую для выделения текущей даты) Я слишком долго смотрю на этот код, поэтому я не знаю, прав ли я или совершенно не так. Это, тем не менее, должно стать хорошим фундаментом для людей, желающих изучить его дальше и, возможно, сделать сообщение об ошибке. Я сделаю это сам в конце концов, когда у меня будет время (и мое здравомыслие вернется)