我正在使用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 Whitaker为similar 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, ""]; }
}