如果格式不包括日期,则jQuery UI日期选取器不会打开到先前选择的日期

时间:2012-03-23 11:33:15

标签: jquery jquery-ui datepicker jquery-ui-datepicker

我注意到jQuery UI datepicker中出现了意外行为。

每当我使用不包含日期的格式时,例如'MM yy'(2011年10月), 日期选择器,下次显示时,指向今天而不是上一个日期。

使用格式时不会发生这种情况,例如'dd / mm / yy'(01/10/2011)。

我认为这实际上可能是一个错误,我会将其报告给jQuery UI社区。

无论如何,与此同时,我想知道你之前是否遇到过这个问题并且可以建议我一个解决方法

Example presenting the problem can be found here.

修改 为了完整性:我将此问题作为错误提交给jQuery UI社区。 For those interested it could be found here.

2 个答案:

答案 0 :(得分:4)

我解决了你的问题。请查看此链接http://jsfiddle.net/nEGTv/3/

只需将此行添加到$("#monthDate1").datepicker('option', 'defaultDate', new Date(year, month, 1));函数中的代码$("#monthDate1").focus

答案 1 :(得分:3)

您标记为正确的答案并不正确。让我分解一下。

$("#monthDate1").focus(function () {
    $(".ui-datepicker-calendar").hide();
    //add event to perform on done button click
    $(".ui-datepicker-close").click(function(){
        var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
        var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
        $("#monthDate1").datepicker('option', 'defaultDate', new Date(year, month, 1));
        $("#monthDate1").datepicker('setDate', new Date(year, month, 1));
    });
});

通过执行$("#monthDate1").focus,每当您的控件进入click时,您就会遇到focus事件,这非常糟糕。

每次$.ajax click时,请考虑启动$(".ui-datepicker-close")。您的功能将从服务器请求不是一次,而是与您的控件进入focus的次数。

修正:

不要在focus上绑定$("#monthDate1"),而是使用livedelegate(对于jquery版本> = 1.9.3,如果我没有记错的话)

以下是live的示例:

$(".ui-datepicker-close").live('click', function(){
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $("#monthDate1").datepicker('option', 'defaultDate', new Date(year, month, 1));
            $("#monthDate1").datepicker('setDate', new Date(year, month, 1));
        });

以下是delegate的示例:

$("#ui-datepicker-div").delegate(".ui-datepicker-close", 'click', function(){
    var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
    var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
    $("#monthDate1").datepicker('option', 'defaultDate', new Date(year, month, 1));
    $("#monthDate1").datepicker('setDate', new Date(year, month, 1));
});

<强>更新

此更新来自我在评论中提供的回复。 在$(".ui-datepicker-calendar").hide();事件中使用focus并不是真的可以,因为它有点小错误。

以下是您应该如何做到这一点没有问题:

var dynamicStyle = $("<style> .ui-datepicker-calendar { display: none; } </style>")
                        .attr("id", "dynamicDatepickerStyle");
$("#monthDate1").datepicker({
    beforeShow: function ()
    {
        $("body").append(dynamicStyle);
    },

    onClose: function ()
    {
        $("#dynamicDatepickerStyle").remove();
    }
});

这将会style附加hide calendar open datepicker remove style datepicker calendar 1}}当{{1}}关闭时,它不会影响页面上的其他日期选择器。如果你想在页面上有几个日期选择器,有些是{{1}}而有些没有。{/ p>