尝试更改#tour_region字段后动态更新jQuery Datepicker。我从Salman的Web Blog中获取了这段代码,并更改了要识别的CSS标识符,并且显然也更改了Ajax调用的URL。

构建JSON响应时,我使用.ajax调用对其进行了测试,但是Salman使用的是.getJSON。

我得到的错误是:
“未捕获的TypeError:无法读取未定义的属性'条目'”

让我认为JSON响应可能有问题。我对.getJSON调用不太熟悉。

提前致谢。

$(document).ready(function(){
    $(function() {
        var dateList = null;
        var date1 = new Date;
        date1.setHours(0, 0, 0, 0);
        date1.setDate(1);
        var date2 = new Date;
        date2.setHours(0, 0, 0, 0);
        date2.setMonth(date2.getMonth() + 12, 0);
        $("form #date").datepicker({
            minDate: date1,
            maxDate: date2,
            beforeShowDay: function(date) {
                var r = [true, ""];
                if (dateList === null) {
                    r[1] = "dp-highlight-unknown";
                } else {
                    var key = $.datepicker.formatDate("yy-mm-dd", date);
                    if (key in dateList) {
                        r[1] = "dp-highlight-available";
                        r[2] = dateList[key].join(", ");
                    }
                }
                return r;
            }
        });
        $("#tour_region").on("change", function(){
            var region = $(this).val();
            $.getJSON("/dates?region=" + region, {
                "alt": "json",
                "start-min": $.datepicker.formatDate("yy-mm-dd", date1),
                "start-max": $.datepicker.formatDate("yy-mm-dd", new Date(date2.getTime() + 86400000)),
                "orderby": "starttime",
                "max-results": 100
            }, function(data) {
                dateList = {};
                $.each(data.feed.entry, function(i, entry) {
                    var key = entry.gd$when[0].startTime.substr(0, 10);
                    if (key in dateList == false) {
                        dateList[key] = [];
                    }
                    dateList[key].push(entry.title.$t);
                });
                $("form #date").datepicker("refresh");
            });
        });
    });
});

最佳答案

这允许日期选择器仅显示从.getJSON返回的日期。感谢大家。

 var dateList = null;
  $(function() {
  var date1 = new Date;
  date1.setHours(0, 0, 0, 0);
  date1.setDate(1);

var date2 = new Date;
date2.setHours(0, 0, 0, 0);
date2.setMonth(date2.getMonth() + 12, 0);

$("form #date").datepicker({
    minDate: date1,
    maxDate: date2,
    beforeShowDay: function(date) {
        var r = [false, ""];
        if (dateList === null) {
            r[1] = "dp-highlight-unknown";
        } else {
            var key = $.datepicker.formatDate("yy-mm-dd", date);
            if ($.inArray(key, dateList) != -1) {
                r[0] = true;
                r[1] = "dp-highlight-available";
            }
        }
        return r;
    }
});

$("#tour_region").on("change", function(){
    var region = $(this).val();
    $.getJSON("/dates?region=" + region, {
        "alt": "json",
        "start-min": $.datepicker.formatDate("yy-mm-dd", date1),
        "start-max": $.datepicker.formatDate("yy-mm-dd", new Date(date2.getTime() + 86400000)),
        "orderby": "starttime",
        "max-results": 100
    }, function(data) {
        console.log(data);
        dateList = [];
        $.each(data, function(i, entry) {
            if ($.inArray(entry, dateList) == -1) {
                dateList.push(entry);
            }
        });
        $("form #date").datepicker("refresh");
    });
 });
});

10-05 18:16
查看更多