我注意到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.
答案 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")
,而是使用live
或delegate
(对于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>