Jquery UI 日期选择器设置日期不适用于格式日期的动态更改
Jquery UI datepicker setDate not working on dynamic change of formatDate
我正在尝试在日期选择器的控制面板中添加一个按钮。它应该允许显示整个月份的名称,而不是特定的日期。
我需要这两种行为(日期选择器和月份选择器(,但似乎日期格式的动态更改使小部件崩溃。注释代码也有同样的问题。
var dateToday = new Date();
var maxDate = "+365";
$('.datepicker').datepicker({
minDate: dateToday,
maxDate: maxDate,
dateFormat: "dd-mm-yy",
changeMonth: true,
changeYear: true,
showButtonPanel: true,
onChangeMonthYear: function(year, month, instance) {
var thisCalendar = $(this);
setTimeout(function() {
var buttonPane = $(instance)
.datepicker("widget")
.find(".ui-datepicker-buttonpane");
$("<button>", {
text: "Whole month",
click: function() {
var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
thisCalendar.datepicker("option", "dateFormat", "MM yy");
thisCalendar.datepicker('setDate', month + "/01/" + year);
//thisCalendar.datepicker('setDate', new Date(year, month, 1));
//thisCalendar.datepicker("refresh");
}
}).appendTo(buttonPane).addClass("ui-datepicker-clear ui-state-default ui-priority-primary ui-corner-all");
}, 1);
}
})
这个小提琴显示了我的问题:https://jsfiddle.net/mLewc6ep/3/。该按钮仅在下个月显示,而不是当前月份。如果您单击它,它始终显示同一月份(例如,截至今天,2021 年 8 月(。
它看起来像一个日期选择器错误,当您更改dateFormat
并且同时设置minDate
和maxDate
时,它会弄乱日期。
解决方案是删除最小/最大日期选项,设置新格式,然后恢复最小/最大:
thisCalendar.datepicker("option", "minDate", null);
thisCalendar.datepicker("option", "maxDate", null);
thisCalendar.datepicker("option", "dateFormat", "MM yy");
thisCalendar.datepicker("option", "minDate", dateToday);
thisCalendar.datepicker("option", "maxDate", maxDate);
// a hack to trick the datepicker and keep the date we set
thisCalendar.datepicker("option", "defaultDate", new Date(year, month, 1));
thisCalendar.datepicker('setDate', new Date(year, month, 1));
这是小提琴。
更新:
这个解决方案有效,但是如果你得到日期:thisCalendar.datepicker('getDate'(; 它总是显示今天的日期。 可能是另一个错误?
一般来说,我不太确定这是一个错误还是正常行为。查看日期选择器代码,很明显他们不希望部分日期格式(例如年 + 月,没有日期(。
日期选择器不仅将日期值保留为日期,它还从输入的文本值中解析它,因此它看起来像这样:
- 我们设置
MM yy
格式 - 我们选择日期
- 日期选取器
Date
对象值转换为文本March 2016
- 目前一切正常,但随后触发了向后进程
- 日期选择器解析
March 2016
文本,这是出错的地方,它无法解析它并将值重置为defaultDate
(默认情况下是今天(
这是他们解析日期的地方,这里是它失败的地方,解析后它有year
和month
值,但day
的默认值是 -1
,所以它不能构造日期。
解决方法是将 defaultDate
值设置为与 date 相同的值,因此当它无法解析文本时,它会回退到我们需要的值。我更新了上面的小提琴和代码。
这似乎很随机,但是如果您将格式的更新移动到按钮单击的第一行,它就可以工作。
试一试!
我忘了提到我添加的东西:省略日期部分时日期格式似乎不起作用。因此,如果您将此行用作块中的第一行,它确实有效。不确定这是否真的有帮助:-(
thisCalendar.datepicker("option", "dateFormat", "dd MM yy");
- 动态添加的标记不会'无法正确使用日期选择器
- 如何在创建动态 HTML 页面时使用日期选择器
- 正在加载动态日历以在一个月的正确日期开始
- Moment JS中的动态日期
- 单击按钮可多次动态添加选择框、文本框和日期,并将这些值插入数据库
- 日期选择器和动态表不使用jQuery函数
- 禁用动态创建的日期选择器中的日期
- 表格报告-动态比较特定用户的输入日期和现有日期
- 无法为动态加载的输入框加载日期选择器和小部件
- jquery在动态元素上调用日期选择器
- Angular UI Bootstrap Datepicker动态日期(变量)
- SlickGrid根据日期错误动态构建列
- 如何动态设置jquery mobile'的minHour选项;s的日期框
- 使用弹出窗口进行动态日期验证
- 将日期选择器动态添加到文本框中
- 日期选择器在动态添加的行中不起作用
- 如何将当前日期动态添加到对象的新实例并将其推送到数组
- 无法为日期选取器中的每个突出显示日期动态设置工具提示
- HTML将日期动态更改为周一、周三或周五
- 动态扩展日期动态表单中的字段