4

我在使用 jqueryUI 使用简单的日期选择器时遇到了一个奇怪的问题。我只想显示一个带有上个月和当前月份的两个月日历。我使用了这段代码:

$(function () {
    $('#picker').datepicker({
        numberOfMonths: 2,
        showCurrentAtPos: 1,
        dateFormat: "yy-mm-dd",
        onSelect: function () {
            $('#out').html(this.value);
        }
    });
});

<div id="picker"></div>
<output id="out"></output>

它显示了我想要的内容,但有一种奇怪的行为,您可以在此处查看:

http://jsfiddle.net/xgvargas/UCbxf/

当您选择一个日期时,它会跳转到其他月份,在某些情况下,即使返回的日期是正确的,所选日期也不再可见。

如果删除行showCurrentAtPos:1,则此行为停止,但在这种情况下,我将拥有当前月份和下个月,这不是我需要的。

这是一个错误还是我忘记了什么?

顺便说一句,我正在使用最新版本的 jquery 和 jqueryUI。并且到目前为止只在 Chrome 中测试过。

4

3 回答 3

3

这是一个 jQuery UI 日期选择器错误,当日期选择器计算和绘制月份并且不能很好地使用由showCurrentAtPos.

一种可能的解决方案是将此代码块添加到jquery.ui.datepicker.js工单中报告的文件中:

if (inst.drawMonth == showCurrentAtPos){

drawMonth = inst.drawMonth - showCurrentAtPos;

} else{

drawMonth = inst.drawMonth;

}

onSelect或按照您的想法在您的函数中应用补丁:

onSelect: function (dateText, datePicker) {
    datePicker.drawMonth += $("#picker").datepicker("option", "showCurrentAtPos");
    $('#out').html(this.value);
}

小提琴:http: //jsfiddle.net/huPSb/1/

于 2013-06-06T07:47:17.860 回答
2

如果您使用此代码更改选择功能,一切都会正常

  onSelect: function (dateText, inst) {
         inst.drawMonth +=1; 
        $('#out').html(this.value);
    }

这是工作示例http://jsfiddle.net/4FFnp/

于 2013-06-06T07:27:17.263 回答
0

我找到了一个解决方案,并在 datepicker 子例程 _adjustDate() 和 _updateDatepicker() 中的两个代码行中修补了 jquery-ui.js:

--- jquery-ui.orig.js   2015-11-23 20:04:52.000000000 +0100
+++ jquery-ui.js    2015-11-23 17:56:37.987111191 +0100
@@ -8815,6 +8815,8 @@
        origyearshtml = inst.yearshtml = null;
        }, 0);
    }
+       // FIX BUG http://bugs.jqueryui.com/ticket/7288
+       inst.drawMonth += this._get(inst, "showCurrentAtPos");
},

// #6694 - don't focus the input if it's already focused
@@ -8940,9 +8942,14 @@
    if (this._isDisabledDatepicker(target[0])) {
        return;
    }
+       // FIX BUG http://bugs.jqueryui.com/ticket/7288
+       /*
        this._adjustInstDate(inst, offset +
        (period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
        period);
+       */
+       this._adjustInstDate(inst, offset, period);
+
    this._updateDatepicker(inst);
},

错误修复已在http://bugs.jqueryui.com/ticket/9923#comment:4http://bugs.jqueryui.com/ticket/7580?cnum_edit=5#comment:5http: //bugs.jqueryui.com/ticket/7580#comment:5 )

于 2015-11-23T20:26:15.363 回答