2013-03-11 60 views
3

我正在使用jQuery的日期选择器来选择日期,我想突出显示一些日期 - 但我遇到一个奇怪的问题beforeShowDayjQuery的datepicker beforeShowDay工作错误的月份?

当页面加载似乎加载了json数据,但当我点击进入输入框和datepicker出现时,没有任何突出显示。当我点击前进月或后退时,加载上个月的数据(例如点击输入 - >日期选择器出现 - >没有高亮 - >下个月点击 - >从前月的数据突出显示)...

现在我已经搜索了很长时间,检查数据是否在所有内容之前加载,但不知何故,这种行为并没有改变。日期选择器都遇到同样的问题。

(jQuery的UI日期选择器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); 
     } 
    }); 
}); 

EDIT 如需进一步信息:这是一个例子JSON对象我从Ajax响应了。

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

+0

所以你说,它的作品确定为各月不同之处在于显示的一个原来?你可以发布resDates的内容(或其样本) – DaveB 2013-03-13 20:12:20

+0

不是。它在初始化时不显示任何内容,然后 - 在切换一个月之后 - 例如,当我在五月份时,在四月的日期中添加了。顺便说一句 - php脚本只是输出每一个日期,所以它不能为错误的月份提供数据。 – RalphP 2013-03-15 20:26:49

回答

1

看起来像你的月份被1,是2,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)); 

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

+0

傻了我...... :-) - 这工作!非常感谢! – RalphP 2013-03-19 19:44:01