在使用“prev”和“next”按钮时,我需要在月份选择时使用jQuery datepicker跳过某些月份。
当触发日期选择器的“下个月”按钮并且在达到无法选择的不需要的月份时重新映射月份时,这很有效,但“上个月”按钮给了我不寻常的行为,我不知道为什么...
假设我有这样的有效月/年范围:
(年,月 - 没有比现在更早的日期)
(2014)11,12 (2015)01,02,03,04,05,11,12
这是我对datepicker的设置(请记住,datepicker内部开始计数,月份为0)
var dateToday = new Date();
m = dateToday.getMonth();
y = dateToday.getFullYear();
jQuery( ".datepickerdiv" ).datepicker({
minDate: dateToday,
maxDate: \'+' . $maxDate . 'm\',
changeYear: true,
changeMonth: false,
beforeShowDay: available,
yearRange: "' . date("Y") . ':' . date('Y', strtotime('+1 year')) . '",
onChangeMonthYear: function(year, month, inst) {
jQuery(\'.ui-datepicker-next\').live("click", function() {
if(month == 6){
year = jQuery(\'select[class=ui-datepicker-year]\').val();
jQuery(\'#anreisedatum\').datepicker( "setDate" , new Date(year, 10, 1));
jQuery(\'#anreisedatum\').datepicker("refresh");
}
});
jQuery(\'.ui-datepicker-prev\').live("click", function() {
var selyear = jQuery(\'.ui-datepicker-year\').val();
year = jQuery(\'select[class=ui-datepicker-year]\').val();
if(month == 10 && y < selyear) {
jQuery(\'#anreisedatum\').datepicker( "setDate" , new Date(selyear, 4, 1));
jQuery(\'#anreisedatum\').datepicker("refresh");
}
});
},dateFormat: "dd.mm.yy",showWeek: true,weekHeader: 'KW'...
到目前为止,“下一个”按钮似乎正常工作,但“prev”按钮有一些奇怪的现象。例如,在2015年“nov 2015”中点击“prev 2015”并且点击“prev”-botton(从“nov 2015”跳到“2015年5月”是正确的,符合上述日期范围),月份将被设置为“2015年5月”,但随后按钮卡在那里。 您不能再在“2015年5月”之前导航了。
是标准行为吗? jQuery(\'#anreisedatum \')。datepicker(“setDate”,new Date(year,4,1)); 从那时起它是最早的可能点吗?
在这种情况下,我必须再次考虑以这种方式控制callendar导航,因为它似乎不可能以这种方式跳过几个月......我是对的吗?
由于
答案 0 :(得分:0)
对于所有需要类似解决方案的人来说,这是我的方法。我对它不满意,因为它非常静态,并且事件处理有点受骗(由于我的项目中的错误事件堆栈排序),但它确实有效。
var dateToday = new Date();
m = dateToday.getMonth();
y = dateToday.getFullYear();
var checkclick;
jQuery(\'input#edit-submit\').attr("disabled", true);
jQuery( ".datepickerdiv" ).datepicker({
minDate: dateToday,
maxDate: \'+' . $maxDate . 'm\',
changeYear: true,
changeMonth: false,
beforeShowDay: available,
yearRange: "' . date("Y") . ':' . date('Y', strtotime('+1 year')) . '",
beforeShow:function(thisObj)
{
jQuery(\'.ui-datepicker-next\').live("click", function() {
checkclick = \'next\';
})
jQuery(\'.ui-datepicker-prev\').live("click", function() {
checkclick = \'prev\';
})
},
onChangeMonthYear: function(year, month, inst) {
year = jQuery(\'select[class=ui-datepicker-year]\').val();
if(month == 6 && checkclick==\'next\'){
jQuery( this ).datepicker( "setDate" , new Date(year, 10, 1));
jQuery( this ).datepicker("refresh");
}
if(month == 10 && checkclick==\'prev\'){
if(month==10 && y < year){
jQuery( this ).datepicker( "setDate" , new Date(year, 4, 1));
jQuery( this ).datepicker("refresh");
}
if(month==10 && m < month && y == year){
jQuery( this ).datepicker( "setDate" , new Date(year, 10, 1));
jQuery( this ).datepicker("refresh");
}
}
},firstDay: ' . $weekday . ',dateFormat: "dd.mm.yy",showWeek: true,weekHeader: \'KW\'...
我希望这对你们中的一些人有用,因为我在datepicker API上找不到任何本地方式来完成这项工作。