1

所以我正在从 jQuery UI datepicker 编写一个日历,而这种更新实例的事情让我发疯了。

目标是用普通表格中的事件填充日历,并使用正确的信息(表格中给出日期)它可以正常工作。它使用事件填充日历,您可以拖放它们以使用正确的信息更新表。这一切都完成了。

然而; 我也希望能够点击一个日期,并为选定的特定日期创建一个事件,这很容易。但是,当我单击所有以前的事件时,由于日历实例已刷新,因此将被删除。(这真的很难解释)。

函数“初始化”为日历中的每个 TD 提供具有正确“日期”属性的 UL(用于拖放),并使用来自外部表的 LI 填充 UL。

所以如果我这样做:

$("#datepicker").datepicker({ 
    firstDay: 1, //Mon-Sun
    onSelect: function() { initialize(); }
});

什么都没有发生..但是如果我这样做:

$("#datepicker").datepicker({ 
    firstDay: 1, //Mon-Sun
    onSelect: function() { initialize();alert(); }
});

您实际上可以看到日历被正确填充(警报阻止代码进一步执行),但是当按下“确定”时,日历实例被刷新并且事件消失了。

所以我需要的是一种“afterNewInstanceCreated:”命令来工作......有什么想法吗?

这是它的外观:(JSFiddle),单击日期也可以看到“魔术”。 http://jsfiddle.net/N97QA/

真的会给予任何帮助

4

1 回答 1

0

在这里找到答案:

如果您在 jquery-ui 1.9 版之前需要“afterShow”事件,您可以覆盖 datepicker._updateDatepicker 函数。

例如:

$(function() {
    $.datepicker._updateDatepicker_original = $.datepicker._updateDatepicker;
    $.datepicker._updateDatepicker = function(inst) {
        $.datepicker._updateDatepicker_original(inst);
        var afterShow = this._get(inst, 'afterShow');
        if (afterShow)
            afterShow.apply((inst.input ? inst.input[0] : null));  // trigger custom callback
    }
});

现在 datepicker 在 datepicker 元素的每次更新后引发一个“afterShow”事件。然后只需在数据选择器中使用此事件

$("#calendar").datepicker({
    firstDay: 1,
    showOtherMonths: true,
    selectOtherMonths: true,
    afterShow: function() {console.log("it works")}
});
于 2017-08-03T12:32:24.767 回答