1

我正在使用jQuery UI 的 datepicker来制作一个日历,该日历在通过 ajax 和 PHP 拉入的 db 的工具提示中显示事件。我遇到的问题是,只有数组中的第一个事件在其日期显示,而不是 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, ""];
                    }
                }
            }

(还有更多,但一切正常)

4

1 回答 1

0

更新: 我终于让它工作了!非常感谢Andrew Whitaker提供了一个类似问题的答案,让我走上了正轨。我的最终代码(尽管我可能还会对其进行一些优化)如下:

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, ""];
          }
        }
        // and more...
于 2021-09-07T20:03:27.933 回答