Jquery 如果格式不为';不包括白天
我注意到jQueryUIDatePicker中有一个意外的行为 每当我使用不包括日期的格式时,例如“MM yy”(2011年10月), 下次显示日期选择器时,它指向今天,而不是上一个日期 如果使用for格式,例如“dd/mm/yy”(2011年10月1日),则不会出现这种情况 我认为这实际上可能是一个bug,我将向jQueryUI社区报告它 无论如何,在此期间,我想知道您是否曾经遇到过这个问题,是否可以向我建议一个解决办法 编辑:Jquery 如果格式不为';不包括白天,jquery,jquery-ui,datepicker,jquery-ui-datepicker,Jquery,Jquery Ui,Datepicker,Jquery Ui Datepicker,我注意到jQueryUIDatePicker中有一个意外的行为 每当我使用不包括日期的格式时,例如“MM yy”(2011年10月), 下次显示日期选择器时,它指向今天,而不是上一个日期 如果使用for格式,例如“dd/mm/yy”(2011年10月1日),则不会出现这种情况 我认为这实际上可能是一个bug,我将向jQueryUI社区报告它 无论如何,在此期间,我想知道您是否曾经遇到过这个问题,是否可以向我建议一个解决办法 编辑: 为了完整性:我将这个问题作为一个bug提交给jQueryUI社
为了完整性:我将这个问题作为一个bug提交给jQueryUI社区 我解决了你的问题。请签出此链接
只需将这一行添加到您的代码
$(“#monthDate1”).datepicker('选项','默认日期',新日期(年,月,1))代码>在你的$(“#monthDate1”)。专注于功能。我解决了你的问题。请签出此链接
只需将这一行添加到您的代码$(“#monthDate1”).datepicker('选项','默认日期',新日期(年,月,1))您的$(“#monthDate1”)中的code>。关注函数。您标记为正确的答案实际上并不正确。让我把它分解一下
$("#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
每次控件进入focus
时,您都在等待click
事件,这非常糟糕
考虑每次在$(“.ui日期选择器关闭”)
上单击时启动$.ajax
。您的函数将从服务器请求的次数不是一次,而是您的控件进入焦点的次数
修正:
不要在$(“#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));
});
下面是一个带有委托的示例:
$("#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();
}
});
var dynamicStyle=$(“.ui日期选择器日历{display:none;}”)
.attr(“id”,“dynamicDatepickerStyle”);
$(“#monthDate1”)。日期选择器({
beforeShow:函数()
{
$(“正文”).append(dynamicStyle);
},
onClose:function()
{
$(“#dynamicDatepickerStyle”).remove();
}
});
这将附加样式
,当打开日期选取器
时,它将隐藏日历
,当日期选取器
关闭时,它将删除样式
,以免影响页面上的其他日期选取器。如果您希望在页面上有多个日期选择器,有些带有日历,有些没有日历。标记为正确的答案实际上并不正确。让我把它分解一下
$("#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
每次控件进入focus
时,您都在等待click
事件,这非常糟糕
考虑每次在$(“.ui日期选择器关闭”)
上单击时启动$.ajax
。您的函数将从服务器请求的次数不是一次,而是您的控件进入焦点的次数
修正:
不要在$(“#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));
});
下面是一个带有委托的示例:
$("#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();
}
});
var dynamicStyle=$(“.ui日期选择器日历{display:none;}”)
.attr(“id”,“dynamicDatepickerStyle”);
$(“#monthDate1”)。日期选择器({
beforeShow:函数()
{
$(“正文”).append(dynamicStyle);
},
onClose:function()
{
$(“#dynamicDatepickerStyle”).remove();
}
});
这将附加样式
,当打开日期选取器
时,它将隐藏日历
,当日期选取器
关闭时,它将删除样式
,以免影响页面上的其他日期选取器。如果你想在页面上有几个日期选择器,有些有日历,有些没有日历。非常感谢你,我想一定有办法完成。干得好+1并接受:)非常感谢你,然后是非常充分的,我想一定有办法完成它。干得好+1并接受:)感谢您的评论,我同意使用live()
或更高版本的jQueryon()
方法(+1)。我读到你不同意一起使用焦点。因此,如果您能提供一个有效的示例,我将不胜感激,因为我不知道您将如何隐藏.ui日期选择器日历,这也是我的一个必须。您仍然可以保留$(“.ui日期选择器日历”).hide()
在focus
处理程序中,如果您只想让此日期选择器不显示日历,则需要执行此操作。或者您可以全局覆盖它,但请注意,这将影响加载它的站点中的所有日期选择器:.ui datepicker calendar{display:none;}
,或者您可以只插入样式