jQuery datepicker - 'beforeShowDay'中的for循环问题

时间:2012-07-27 01:32:01

标签: jquery jquery-ui-datepicker

我正在使用jQuery UI's datepicker创建一个日历,该日历显示来自db的工具提示中的事件,这些事件是通过ajax和PHP引入的。我遇到的问题是,只有数组中的第一个事件显示在其日期,而不是ajax返回的所有内容。

我通过console.log()检查了数组内容和长度,并确认它返回了正确的信息,但除此之外,我不知道还有什么可以尝试。

jQuery的相关部分:

function calendarModify() {
var cal = $(".caledit");
$.ajax({
    url: "calprocess.php?action=showdates",
    type: "POST",
    dataType: "json",
    success: function (events) {
        cal.datepicker({
            showButtonPanel: true,
            dateFormat: "yy-mm-dd",
            beforeShowDay: function (dates) {
                var d = ('0' + dates.getDate()).slice(-2),
                    m = ('0' + (dates.getMonth() + 1)).slice(-2),
                    y = dates.getFullYear(),
                    date = y + "-" + m + "-" + d;
                for (var i = 0; i < events.length; i++) {
                    if (events[i].event_date === date) {
                        return [true, "event", events[i].event_desc];
                    }
                    else {
                        return [true, ""];
                    }
                }
            }

(还有更多,但一切正常)


更新 我终于搞定了!非常感谢Andrew Whitakersimilar question提供答案,让我走上正轨。我的最终代码(虽然我可能还会稍微优化一下)如下:

function calendarModify() {
var cal = $(".caledit");
$.ajax({
    url: "calprocess.php?action=showdates",
    type: "POST",
    dataType: "json",
    beforeSend: function () {
        cal.addClass("loading");
    },
    success: function (events) {
        cal.removeClass("loading");
        cal.datepicker({
            showButtonPanel: true,
            dateFormat: "yy-mm-dd",
            beforeShowDay: function (dates) {
                var d = ('0' + dates.getDate()).slice(-2),
                    m = ('0' + (dates.getMonth() + 1)).slice(-2),
                    y = dates.getFullYear(),
                    date = y + "-" + m + "-" + d,
                    length = events.length,
                    i = 0,
                    event = null,
                    eventDate = false;
                while (i < length && !eventDate) {
                    event = events[i];
                    eventDate = event.event_date.valueOf() === date.valueOf();
                    i++;
                    console.log(event);
                }
                if (eventDate) {
                    return [true,"event", event.event_desc];
                } else { return [true, ""]; }
            }

0 个答案:

没有答案