【问题标题】:jQuery datepicker - skip certain monthsjQuery datepicker - 跳过某些月份
【发布时间】:2014-08-05 12:28:02
【问题描述】:

我需要在使用“prev”和“next”按钮时使用 jQuery datepicker 在月份选择中跳过某些月份。

这在触发日期选择器的“下个月”按钮并在到达无法选择的不需要的月份时重新映射月份时效果很好,但是“上个月”按钮给了我不寻常的行为,我不知道为什么...

假设我有这样的有效月份/年份范围:

(年,月 - 没有比现在更早的日期)

(2014) 11,12
(2015)01,02,03,04,05,11,12

这是我对日期选择器的设置(请记住,在内部,日期选择器从月份开始计数为 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'...

目前看来,“下一个”按钮工作正常,但“上一个”按钮发生了一些奇怪的事情。例如,当在“2015 年 11 月”并单击“上一个”按钮时,月份完美地设置为“2015 年 5 月”(根据上面的日期范围,从“2015 年 11 月”跳转到“2015 年 5 月”是正确的),但随后按钮卡在那里。 您不能再早于“2015 年 5 月”进行导航。

是标准的行为 jQuery(\'#anreisedatum\').datepicker( "setDate" , new Date(year, 4, 1)); 这是从那时起最早的时间点吗?

在这种情况下,我必须重新考虑以这种方式控制 callendar 导航,因为似乎无法以这种方式跳过几个月的显示......我说的对吗?

谢谢

【问题讨论】:

    标签: jquery datepicker jquery-ui-datepicker


    【解决方案1】:

    对于所有需要类似解决方案的人来说,这是我的方法。我对它不满意,因为它非常静态,并且事件处理有点受骗(由于我的项目中的错误事件堆栈排序),但它确实有效。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多