使用日期字符串数组在bootstrap datepicker中设置禁用月数不起作用
我有一个datepicker,它具有以下配置:
HTML:
JS:
var datesToDisable = ["2016-11-01","2016-08-01","2016-06-01", "2016-05-01","2016-04-01","2015-12-01","2015-09-01"]; $('#datepick').datepicker({ format: 'yyyy-mm-dd', minViewMode: 1, // 1 for months maxViewMode: 2, // 2 for years startDate: '-36m', endDate: '+0m', autoclose: true, toggleActive: true }); $('#datepick').datepicker('setDatesDisabled', datesToDisable);
然后,异步调用将检索日期数组(此处由datesToDisable
变量表示),这些日期数组使用setDatesDisabled
方法传递给setDatesDisabled
(如代码片段的最后一行所示),但它不起作用,因为月份对于已通过的日期仍可在日历中选择。
问题:这是在bootstrap datepicker日历中设置禁用月份的正确方法吗? 我是否需要在一个月内通过所有日期以禁用特定月份?
您可以在以下jsfiddle中查看它: http : //jsfiddle.net/javlc/52g9xcz2/
您可以使用.on("show")
的.on("show")
函数来更改显示。 我已经使用jQuery的grep
来查找与datesToDisable
数组匹配的datesToDisable
。 如果有任何匹配,那么我将disabled
类应用于该元素。
var datesToDisable = ["2016-11-01","2016-08-01","2016-06-01", "2016-05-01","2016-04-01","2015-12-01","2015-09-01"]; var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; $('#example1').datepicker({ format: 'yyyy-mm-dd', minViewMode: 1, // 1 for months maxViewMode: 2, // 2 for years startDate: '-36m', endDate: '+0m', autoclose: true, toggleActive: true}).on("show", function(event) { var year = $("th.datepicker-switch").eq(1).text(); // there are 3 matches $(".month").each(function(index, element) { var el = $(element); var hideMonth = $.grep( datesToDisable, function( n, i ) { return n.substr(0, 4) == year && months[parseInt(n.substr(5, 2)) - 1] == el.text(); }); if (hideMonth.length) el.addClass('disabled'); /* To hide them... if (hideMonth.length) el.hide(); */ }); });
JsFiddle示例: https ://jsfiddle.net/k144qmct/1/
Bootstrap setDatesDisabled
仅接受dates
setDatesDisabled
接受months
。 我正在开发的一个解决方案如下:
首先,我们必须创建一个新数组: var dates=[]
。
对于来自datesToDisable
数组的每个项目,我们需要push
所有日期从项目month
push
入dates
。
var datesToDisable = ["2016-11-01","2016-08-01","2016-06-01", "2016-05-01","2016-04-01","2015-12-01","2015-09-01"];
例如,我们有2016-11-01
。 您必须添加November(11)
月的所有days
。
为此,我使用了daysInMonth
方法来查找一个月的天数。
function daysInMonth(month,year) { return new Date(year, month, 0).getDate(); } daysInMonth(2016,11,0) //30
最后一步是pass
日期数组pass
给datesDisabled
属性。
这是工作解决方案 。