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