jQuery datepicker - 跳过某些月份

时间:2014-08-05 12:28:03

标签: jquery datepicker jquery-ui-datepicker

在使用“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导航,因为它似乎不可能以这种方式跳过几个月......我是对的吗?

由于

1 个答案:

答案 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上找不到任何本地方式来完成这项工作。