我正在使用jquery的datepicker选择日期,并且希望突出显示一些日期-但在ShowDay 之前,遇到了一个奇怪的问题。
当页面加载时,似乎已加载json数据,但是当我单击输入框并显示datepicker时,未突出显示任何内容。在我单击向前或向后的月份之后,将加载上个月的数据(例如,单击输入->出现日期选择器->没有高亮显示->单击下个月->来自上个月的数据将显示为突出显示)...
我已经在Google上搜索了很长时间,检查是否在所有数据之前都加载了数据,但是这种行为并没有改变。两个日期选择器都遇到相同的问题。
(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对象。
最佳答案
看来您的月份偏移了1,javascript方法date.getMonth()返回从零开始的月份(例如,一月为0,二月为1),而您的PHP脚本返回正常格式的日期(一月为1,二月是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));
你应该得到正确的月份显示