我正在使用jquery datepicker,但是当用户更改月份时,它会自动将年份更改为设置为最小日期的年份。 我不明白为什么会发生这种情况,而且似乎也是随机发生的。
这是我的功能:
function DatePickerShort() {
$(":input[datepicker]").each(function () {
ShowPicker($(this));
$(this).bind('focus', function () {
ShowPicker($(this));
});
});
function ShowPicker(obj) {
if ($(obj).is('[readonly]')) {
$(obj).datepicker('destroy');
}
else {
$(obj).datepicker('destroy');
var fecha = new Date();
$(obj).datepicker({
changeMonth: true,
changeYear: true,
minDate: new Date(2000, 08, 01),
firstDay: 1,
dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa'],
dateFormat: 'dd/mm/yy',
monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
});
}
}
}
答案 0 :(得分:1)
我做了很多假设,因为你确实提供了关于html的任何清晰度。要获得更好的答案,请发布html。
我认为你想要完成的事情: 当您专注于具有datepicker属性的输入元素时,您正在尝试激活日期选择器。如果它是只读元素,则不希望显示日期选择器。
你在做什么: 您正在查找标有datepicker属性的所有输入元素并创建一个datepicker。虽然,老实说,我不知道选择器是如何工作而不看你的HTML。然后,每次输入获得焦点时,都会破坏日期选择器并创建一个全新的。当用户选择日期时,输入失去焦点。当datepicker将日期放回时,它会获得焦点并再次替换新的日期选择器。它可能是间歇性的,具体取决于焦点事件(创建新的日期选择器)是在填充输入框之前还是之后发生。
修复:
$("input[datepicker]:not([readonly])").datepicker({
changeMonth: true,
changeYear: true,
minDate: new Date(2000, 08, 01),
firstDay: 1,
dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa'],
dateFormat: 'dd/mm/yy',
monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic']
});
正如JazZRo在评论中所说,只需设置一次datepicker。
我的偏好是用类标记日期选择器并将其用作选择器。它表现更好,更清晰。如果可以,只需使用类标记日期选择器,不要标记只读日期。
请记住,只要readonly为false,它仍然不会获取datepicker,因为选择器只是检查是否存在readonly属性(与datepicker属性相同)。请参阅此JSfiddle以获取示例: http://jsfiddle.net/DanCaveman/RBtY5/4/