我在使用bootstrap datepicker的beforeShowDay
函数时遇到了一些问题。我的意图是当我点击任何一天时,所选日期后的5天必须包含活动类。
页面加载时,该功能完美运行。但是当我尝试选择任何其他日子时,如果我希望该功能起作用,我必须双击。该功能必须单击一下。有什么不对吗?
var selectedDay = new Date().getTime();
$('.datepicker').datepicker({
beforeShowDay: function (date) {
var d = date.getTime();
if (d > selectedDay && d < selectedDay + 1 + 86400000 * 5) {
return {classes: 'active'};
}
},
startDate: '0'
}).on('changeDate', function(e){
selectedDay = e.date;
selectedDay = selectedDay.getTime();
});
答案 0 :(得分:2)
我知道这是一个古老的问题,但是自启动日期选择器至今仍在发生。原因是beforeshowday
在changeDate
之前触发。因此,每次单击新的日期后,beforeshowday
都会先出现(带有旧的日期),然后changeDate
就会发生。不管我怎么看。我觉得这是他们应该修复的错误,因为样式应该与新日期一起使用。因此,changeDate
应该先于其他任何地方。
无论如何,解决方案实际上非常简单。更改日期后,只需在update
中强行插入changeDate
,它将使用新的日期触发beforeShowDay
。这是我的代码段作为示例:
$('#datepicker').datepicker({
inline: true,
todayHighlight: true,
beforeShowDay:function hday(date){
return (is_pay_day() && day_diff(date)<14 && day_diff(date)>0 ) ? {classes: 'highlight'} : {} ;
}
}).datepicker('setDate', 'today').on("changeDate", function (ev) {
//set the new date if one is selected
(!ev.date) ? $(this).datepicker('setDate', selectedDate) : selectedDate = ev.date;
$('#datepickerInput').val(selectedDate.toDateString());
//force the update, so the beforeShowDay will be triggered
$('#datepicker').datepicker('update',selectedDate);
});
答案 1 :(得分:0)
经过思考和搜索后,我发现了一个可能的解决方案,如果它有效,请告诉我,谢谢
var selectedDay = new Date().getTime();
$('.datepicker').datepicker({
beforeShowDay: function (date) {
var d = date.getTime();
if (d > selectedDay && d < selectedDay + 1 + 86400000 * 5) {
return {classes: 'active'};
}
},
startDate: '0'
}).on('changeDate', function(e){
selectedDay = e.date;
selectedDay = selectedDay.getTime();
$(".datepicker").data("datepicker").fill();
});