Как реализовать пользовательскую функциональность после изменения месяца?

Я использую средство выбора даты jQuery в качестве встроенного календаря, который используется для фильтрации данных на странице. Вместо обычных событий публикации, которые он делает, я использовал селекторы jQuery, чтобы переписать ссылки даты, чтобы они были настоящими гиперссылками.

Поэтому, если я нахожусь на странице http://mysite.com/mypage, гиперссылки будут http://mysite.com/mypage/2011-1-1, http://mysite.com/mypage/2011-1-2 и т. д.

Итак, у меня есть датапикер

$(function () {
    $('.calendar').datepicker({
        showOtherMonths: false
    });
    configureCalendarLinks();
});   

И некоторый код для изменения ссылок:

    configureCalendarLinks = function (calendarId) {
        calendarId = calendarId || '';

        var calendarIdSelector = calendarId != '' ? '#' + calendarId + ' ' : '';
        var rootUrl = getShowRootUrl(location.href);

        $(calendarIdSelector + 'a.ui-state-default').attr('href',
            function () {
                var url = rootUrl + .getFullDate($(this).text(), calendarId));
                return url;
            });
    };

getFullDate = function (date, calendarId) {
    calendarId = calendarId || '';
    var dDate;
    if (calendarId == '')
        dDate = new Date(getDatePickerCalendarYear(), getDatePickerCalendarMonth(), date);
    else
        var dDate = new Date(getDatePickerCalendarYear(calendarId), getDatePickerCalendarMonth(calendarId), date);

    return date;
};

getDatePickerCalendarYear = function (calendarId) {
    calendarId = calendarId || '';
    var calendarIdSelector = calendarId != '' ? '#' + calendarId + ' ' : '';
    var calendarYear = $(calendarIdSelector + '.ui-datepicker-year').eq(0).text();
    return calendarYear;
};

.getDatePickerCalendarMonth = function (calendarId) {
    calendarId = calendarId || '';
    var calendarIdSelector = calendarId != '' ? '#' + calendarId + ' ' : '';
    var monthNumber = getMonthNumber($(calendarIdSelector + '.ui-datepicker-month').eq(0).text());
    return monthNumber;
};

getMonthNumber = function (monthName) {
    var monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
    var index = $.inArray(monthName, monthNames);
    return index;
};

И все работало нормально, пока я не поменял месяц. Как мне заставить код снова запускаться, когда месяц изменяется с помощью datePicker? Я пытался использовать onChangeCalendar и onBeforeShow, но они срабатывают до изменения календаря, из-за чего даты становятся пустыми.

В идеале я хотел бы повторно запустить configureCalendarLinks в методе onAfterShow(), но такой возможности нет. Есть ли способ сделать это?

Спасибо

И если есть более простой и лучший способ выполнить то, что я пытаюсь сделать... . . тоже норм.


person John    schedule 28.02.2011    source источник


Ответы (1)


Это может быть то, что вы ищете?

onChangeMonthYear

http://jqueryui.com/demos/datepicker/#event-onChangeMonthYear

person Seth    schedule 28.02.2011
comment
К сожалению, onChangeMonthYear() срабатывает перед новым месяцем и визуализацией его ячеек. - person John; 01.03.2011
comment
Если элементы месяца имеют уникальный идентификатор или имя класса, вы можете привязать к нему событие изменения. $('.ui-datepicker-month').bind('change', function(){}); - person Seth; 01.03.2011
comment
‹td onclick=DP_jQuery_1298935772650.datepicker._selectDay('#myCalendar',9,2010, это);вернуть false; class= ›‹a href=# class=ui-state-default›20‹/a›‹/td› - person John; 01.03.2011
comment
Сет, Выше показано, как выглядит отдельный элемент дня. Это что-то, что может использовать bind()? - person John; 01.03.2011
comment
Ты должен быть способен. Это может быть хорошим случаем для метода .delegate. $('.ui-datepicker-calendar').delegate('.ui-state-default', 'click', function(){ console.log($(this); }); - Это будет console.log элемент, который вы щелкаете. - person Seth; 01.03.2011
comment
К какому идентификатору события привязано? Когда нажимается ссылка даты? Главное, что я пытаюсь сделать, это не реагировать на нажатие ссылки, а изменить href ссылки. - person John; 01.03.2011
comment
Проблема во времени событий. DatePicker отображает дни после onChangeMonth() и после событий щелчка ссылки Prev и Next. Я могу установить href, но через долю секунды он перезаписывается. Насколько я могу судить, единственным решением является отказ от DatePicker и использование чего-то более надежного, например, календаря YUI, который позволяет настраивать рендеринг ячейки даты. - person John; 06.03.2011