2016-12-27 155 views
0

我有一个日期选择器分配给几个字段,并在我的beforeShowDay属性中禁用了特定日期的数组。JQuery UI日期选择器禁止选择的月份

.datepicker({ beforeShowDay: disablePaymentDates, minDate: 0, maxDate: afterSixMonths }); 

我试图禁用用户在所有日期选择器中选择日期的月份。无论如何要做到这一点?

+0

什么是 “disablePaymentDates” 日期范围?数组 ?它应该是一个以date为参数的函数。 http://api.jqueryui.com/datepicker/#option-beforeShowDay – roetnig

+0

它是一个以mm/dd格式保存日期的数组。 – Tyharo

回答

0

我想出了一个类似于Roetnig's的解决方案。我将下面的代码添加到beforeShowDay属性调用的函数中。

var monthsToDisable= []; 
if ($.inArray(date.getMonth(date), monthsToDisable) > -1) { 
    $return = false; 
    $returnclass = "unavailable"; 
} 

然后,我用相应的月份(0-11)填充'monthsToDisable'。由于此数组将根据用户操作进行更新,因此我只需在更新数组后重新应用datepicker即可。

1

如所指示的datepicker API

beforeShowDay

类型:Function(日期日期)

默认:空

采用一个日期作为参数的函数而绝返回数组:

[0]:指示是否可以选择此日期的真/假[1]:要添加到日期单元格的CSS类名称或默认演示文稿的“”[2]:此日期的可选弹出工具提示

该函数在日期选择器中显示前每天都会调用。

.datepicker({ 
    minDate: 0, 
    maxDate: afterSixMonths, 
    beforeShowDay: function(date) { 
     var dd = date.getDate(); 
     if ($.inArray(dd, disablePaymentDates)!= -1) { 
      return [false, "", "disabled" ]; 
     } else { 
      return [true, "", "enabled" ]; 
     } 
    } 
}); 
+0

因此,为了禁用选择日期的月份,我必须重新应用日期选取器到所有元素? – Tyharo

+1

你可以在函数内添加任何你想要的内容......禁用某周的某些日子,当前月份,无论如何。您在函数中收到日期,检查有效性并返回三个值。这只是一个使用的例子。 – roetnig

0

或者,您可以禁用使用moment.js

var disableRangeStartDate = '2017-10-29'; 
var disableRangeEndDate = '2018-04-18'; 

.datepicker({ 
isInvalidDate: function(arg){ 
     var thisMonth = arg._d.getMonth()+1; 
     if (thisMonth<10){thisMonth = "0"+thisMonth;} 
     var thisDate = arg._d.getDate(); 
     if (thisDate<10){thisDate = "0"+thisDate;} 
     var thisYear = arg._d.getYear()+1900; 
     var thisCompare = thisYear +"-"+ thisMonth +"-"+ thisDate; 

    return moment(thisCompare).isBetween(disableRangeStartDate, disableRangeEndDate); 
     } 
}); 
相关问题