Как запретить jQuery uidatepicker выделять выбранную (или текущую) дату во всех месяцах календаря? - PullRequest
4 голосов
/ 17 августа 2010

Я несколько раз просматривал опции для этого плагина и, похоже, не могу найти способ отключить это поведение: текущая или выбранная дата выделяется во всех месяцах виджета, а не только в текущем месяце. Например, если я выберу 17 августа, а затем перейду к сентябрю, октябрю и т. Д., 17-е также будет выбрано в те месяцы, что, на мой взгляд, не имеет смысла. Я не могу понять, почему он это делает, или даже обоснование этого, если это особенность (я думаю, это может быть второстепенный вопрос). Есть идеи как его отключить? Ссылка на все месяцы присваивается одинаковые классы CSS. Ниже приведены параметры, которые я использую:

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

Ответы [ 2 ]

2 голосов
/ 18 августа 2010

Ошибка (или функция, но я надеюсь, что это не так) была введена в версии 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, по-видимому, неверно и используется в нескольких местах. (И тот факт, что в предыдущей версии не было ничего плохого, несмотря на неправильную переменную, используемую для выделения текущей даты) Я слишком долго смотрю на этот код, поэтому я не знаю, прав ли я или совершенно не так. Это, тем не менее, должно стать хорошим фундаментом для людей, желающих изучить его дальше и, возможно, сделать сообщение об ошибке. Я сделаю это сам в конце концов, когда у меня будет время (и мое здравомыслие вернется)

0 голосов
/ 17 августа 2010

Вы модифицируете CSS вообще? Вот jsFiddle , который я собрал для другого вопроса SO и изменил его для настроек DatePicker, которые вы перечислили. Я не вижу поведения, которое вы описываете. Мое первоначальное предположение, что вы где-то переопределяете CSS. Это тот случай?

Надеюсь, это поможет!

...