jQuery DatePicker - Как выделить определенные дни каждый месяц? - PullRequest
1 голос
/ 11 марта 2010

У меня есть jquery datepicker, который по умолчанию отображает текущую дату как полный календарь. Перед тем, как сделать это, я получаю список дней с сервера через ajax дней, которые должны быть выделены для текущего месяца. Код для этого выглядит следующим образом:

 $.get("Note/GetActionDates/?orgID=" + orgID + "&month=" + month +"&year=" + year,
        null, function(result) {
            RenderCalendar(result);
        }, "json");


function RenderCalendar(dates) {
        $("#actionCal").datepicker({ dateFormat: 'dd/mm/yy', beforeShowDay: function(thedate) {
            var theday = thedate.getDate();
            if ($.inArray(theday, dates) == -1) {
                return [true, "", ""];
            }
            else {
                return [true, "specialDate", "Actions Today"];
            }
        }
        });
    }

Это все хорошо, но я бы хотел, чтобы выделенные даты обновлялись, когда пользователь нажимает на другой месяц. Я могу изменить код инициализации jquery datepicker с помощью следующего кода:

onChangeMonthYear: function(year, month, inst) {
            //get new array of dates for that month
            $.get("Note/GetActionDates/?orgID=" + orgID + "&month=" + month + "&year=" + year,
            null, function(result) {
                RenderCalendar(result);
        }, "json");
            }

Но, похоже, это не работает.

Может ли кто-нибудь показать мне, что я делаю не так? Спасибо! :)

ОБНОВЛЕНИЕ - Рабочий код

Спасибо за помощь!

Я настроил код из petersendidit следующим образом, и теперь он работает. Собираюсь добавить немного больше кода для удаления повторяющихся дат из массива дат, но кроме этого все хорошо.

$("#actionCal").datepicker({
            dateFormat: 'dd/mm/yyyy',
            beforeShowDay: function(thedate) {
                var theday = thedate.getDate() + "/" + (thedate.getMonth() + 1) + "/" + thedate.getFullYear();
                if ($.inArray(theday, actionCalDates) == -1) {
                    return [true, "", ""];
                } else {
                    return [true, "specialDate", "Actions Today"];
                }
            },
            onChangeMonthYear: function(year, month, inst) {
                dateCount = 0;
                getDates(orgID, month, year);
            }

        });

function getDates(orgID, month, year) {
        dateCount += 1;
        if (dateCount < 4) {
            $.ajax({
                url: "Note/GetActionDates/",
                data: {
                    'orgID': orgID,
                    'month': month,
                    'year': year
                },
                type: "GET",
                dataType: "json",
                success: function(result) {
                    actionCalDates = actionCalDates.concat(result);
                    getDates(orgID, month + 1, year);
                    getDates(orgID, month - 1, year);
                }
            });
        }
    }

1 Ответ

1 голос
/ 11 марта 2010

Проблема в том, что вы выполняете запрос ajax наChangeMonthYear и повторно инициализируете средство выбора даты, когда к концу вашего запроса ajax новый месяц уже отрисован.

Что вы можете сделать, это загрузить «даты» для текущего месяца, а также предыдущего и следующего месяца. Затем onChangeMonthYear принесите больше дат и добавьте их в свой массив дат.

Как то так (не проверено):

var actionCalDates = array();
function getDates(orgID, month, year) {
    $.ajax({
        url:"Note/GetActionDates/",
        data: {
            'orgID':orgID,
            'month':month,
            'year':year
        },
        type:"GET",
        dataType: "json",
        success: function(result) {
            actionCalDates.concat(result);
            getDates(orgID, month+1, year);
            getDates(orgID, month-1, year);
        }
    });
}

$("#actionCal").datepicker({ 
    dateFormat: 'dd/mm/yy',
    beforeShowDay: function(thedate) {
        var theday = thedate.getDate();
        if ($.inArray(theday, actionCalDates) == -1) {
            return [true, "", ""];
        } else {
            return [true, "specialDate", "Actions Today"];
        }
    },
    onChangeMonthYear: function(year, month, inst) {
        getDates(orgID, month, year);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...