jquery datepicker beforeShowDay工作错误的一个月?

时间:2013-03-11 18:54:19

标签: javascript jquery ajax datepicker

我正在使用jquery的datepicker来选择日期,我想突出显示一些日期 - 但我遇到了一个奇怪的问题 beforeShowDay

当页面加载时,似乎加载了json数据,但是当我点击输入框并出现datepicker时,没有任何内容突出显示。单击前进月份或后退后,将加载上个月的数据(例如,点击输入 - >出现datepicker - >没有高亮 - >点击下个月 - >来自上个月的数据突出显示)。

我已经google了很长时间,检查数据是否在所有内容之前加载,但不知怎的,这种行为没有改变。两个datepicker都遇到了同样的问题。

(jquery-ui datepicker 1.10.1,jquery 1.9.1)

我对每一个提示感到高兴!

var resDates;
var done = false;

function markDate(date) {
    var ret = [true, 'free'];

    if (!done) {
        $.ajax({
            dataType: "json",
            url: "modules/OutShop/getReservations.php",
            data: {item_id: $("#item-id").val()},
            async: false,
            success: function (dates) {
                resDates = dates;
                done = true;
            }
        });
    }


    $.each(resDates, function(key, value) {
        var d = (date.getFullYear() + "-" + ("0" + date.getMonth()).slice(-2) + "-" + ("0" + date.getDate()).slice(-2));
        if (d == value["day"]) {
        //$("body").append("d: " + d + ", v: " + value["day"] + ", s: " + value["status"] + "  ");
        //$("body").append("s: " + value["status"] + "  ");
            if (value["status"] == "1")
                ret = [false, 'marked'];
            else if (value["status"] == "2")
                ret = [false, 'reserved'];
            else
                ret = [true, 'free'];
        }
    });

    return ret;
}

$(document).ready(function() {


    if (!done) {
        $.ajax({
            dataType: "json",
            url: "modules/OutShop/getReservations.php",
            data: {item_id: $("#item-id").val()},
            async: false,
            success: function (dates) {
                resDates = dates;
                //done = true;
            }
        });
    }

    $("#item-datepicker-min").datepicker({
        showButtonPanel: true,
        defaultDate: +3,
        minDate: +3,
        beforeShowDay: markDate,
        onSelect: function(selectedDate) {
            $("#item-datepicker-max").datepicker("option", "minDate", selectedDate);
        }
    });

    $("#item-datepicker-max").datepicker({
        showButtonPanel: true,
        minDate: +3,
        defaultDate: +6,
        beforeShowDay: markDate,
        onSelect: function(selectedDate) {
            $("#item-datepicker-min").datepicker("option", "maxDate", selectedDate);
        }
    });
});

修改 有关详细信息:这是我从ajax响应中获得的示例json对象。

  

[{ “状态”:3, “日”: “2013年4月10日”},{ “状态”:3, “日”: “2013-04-11”},{ “状态”:3 , “天”: “2013年4月12日”},{ “状态”:3, “日”: “2013年4月13日”},{ “状态”:2 “日”:“2013-04- 10 “},{” 状态 “:2”,日 “:” 2013-04-11 “},{” 状态 “:2”,日 “:” 2013年4月12日 “},{” 状态“:2 , “天”: “2013年4月13日”}]

1 个答案:

答案 0 :(得分:1)

看起来你的月份偏移1,javascript方法date.getMonth()返回从零开始的月份(例如,1月是0,2月是1),你的PHP脚本以正常格式返回日期(Jan是1,2月是2)

检查this

所以如果你改变了

var d = (date.getFullYear() + "-" + ("0" + date.getMonth()).slice(-2) + "-" + ("0" + date.getDate()).slice(-2));

var d = (date.getFullYear() + "-" + ("0" + date.getMonth()+1).slice(-2) + "-" + ("0" + date.getDate()).slice(-2));

你应该得到正确的月份