Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery datepicker beforeShowDay用于错误月份?_Javascript_Jquery_Ajax_Datepicker - Fatal编程技术网

Javascript jquery datepicker beforeShowDay用于错误月份?

Javascript jquery datepicker beforeShowDay用于错误月份?,javascript,jquery,ajax,datepicker,Javascript,Jquery,Ajax,Datepicker,我正在使用jquery的datepicker来选择日期,我想突出显示一些日期,但我在ShowDay之前遇到了一个奇怪的问题 当页面加载时,似乎加载了json数据,但当我点击输入框并显示datepicker时,没有突出显示任何内容。单击“向前月”或“向后月”后,将加载上个月的数据(例如,单击输入->显示日期选择器->无突出显示->单击下个月->上个月的数据突出显示) 我在谷歌上搜索了很长一段时间,检查数据是否在加载之前加载,但不知何故,这种行为并没有改变。两个日期选择器都遇到相同的问题 (jQue

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

当页面加载时,似乎加载了json数据,但当我点击输入框并显示datepicker时,没有突出显示任何内容。单击“向前月”或“向后月”后,将加载上个月的数据(例如,单击输入->显示日期选择器->无突出显示->单击下个月->上个月的数据突出显示)

我在谷歌上搜索了很长一段时间,检查数据是否在加载之前加载,但不知何故,这种行为并没有改变。两个日期选择器都遇到相同的问题

(jQueryUIDatePicker 1.10.1,jQuery1.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对象示例

[2013-04-11]、[2013-04-12]、[2013-04-13]、[2013-04-10]、[2013-04-11]、[2013-04-12]、[2013-04-12]、[2013-04-13]、[2013-04-13]、[2013-04-13]、[2013-04-10]、[2013-04-11]、[2013-04-11]、[2013-04-12]、[2013-04-12]、[2013-04-14]、[2013-04-13]、[2013-04-04-13]、[2013-04-14]、[2013-04-14]、[2013]


看起来您的月份被1抵消,javascript方法date.getMonth()返回以零为基础的月份(例如一月为0,二月为1),PHP脚本以正常格式返回日期(一月为1,二月为2)

检查

所以如果你改变

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


您应该得到正确的月份显示

那么您是说除了最初显示的月份之外,它在所有月份都正常工作?你能发布resDates(或它的一个样本)的内容吗。它在init上不显示任何内容,然后-在切换一个月后-例如,为我在5月份的4月份添加了类。顺便说一下,php脚本只输出每个日期,所以它不可能为错误的月份提供数据。
var d = (date.getFullYear() + "-" + ("0" + date.getMonth()+1).slice(-2) + "-" + ("0" + date.getDate()).slice(-2));