【发布时间】:2019-09-09 16:22:56
【问题描述】:
我正在使用完整的日历来生成日期和显示事件。 一切正常,但我想要一个附加功能,即如果它有超过 3 个事件,我想将单元格颜色更改为红色。 如果日期有超过 3 个函数/事件,则整个单元格颜色应更改为红色。这样用户就可以知道预订已满。 我还贴了下面的截图
以下是我的代码:-
function clickmeforcalender(event) {
debugger
$('#calendar').show();
var events = [];
$.ajax({
type: "GET",
url: "/Booking/GetEvents",
success: function (data) {
$.each(data, function (i, a) {
events.push({
title: a.Function_Name,
start: a.Function_Date1,
url: a.Booking_ID,
FSlot: a.Function_Slot,
MSlot: a.Marquee_Name,
Marquee_Slot: a.Marquee_Slot,
BPerson: a.Booking_Person,
BookedBy: a.Booking_Name,
});
$("#calendar").css("background-color", "WHITE");
})
var allEvents = $(".calendar").fullCalendar("clientEvents");
var exists = 0;
$.each(allEvents, function (index, value) {
if (new Date(value.start).toDateString() === new Date(date).toDateString()) {
exists++;
if (exists == 2) {
value.css("background-color", "red");
}
}
});
GenerateCalender(events);
},
error: function (error) {
alert('failed');
}
});
};
function GenerateCalender(events) {
debugger
$('#calendar').fullCalendar({
height: 550,
header: {
left: 'prev,next today',
center: 'addEventButton',
right: 'month,agendaWeek,agendaDay,listWeek',
},
defaultDate: new Date(),
navLinks: true,
editable: true,
eventLimit: true,
events: events,
eventClick: function (calEvent, jsEvent, view) {
selectedEvent = calEvent;
//alert('Event: ' + calEvent.title);
jsEvent.preventDefault();
$('#myModal #eventTitle').text(calEvent.BookedBy + "-" + calEvent.title).css("font-weight", "Bold");
var $description = $('<div/>');
$description.append($('<p/>').html('<b>FucntionDate:</b>' + calEvent.start.format("DD-MMM-YYYY HH:mm")));
//if (calEvent.end != null) {
// $description.append($('<p/>').html('<b>End:</b>' + calEvent.end.format("DD-MMM-YYYY HH:mm a")));
//}
$description.append($('<p/>').html('<b>EventName:</b>' + calEvent.title));
if (calEvent.MSlot == 1) {
$description.append($('<p/>').html('<b>MaqueeSlot:</b>' + "Full"));
}
else if (calEvent.MSlot == 2) {
$description.append($('<p/>').html('<b>MaqueeSlot:</b>' + "Half"));
}
else {
$description.append($('<p/>').html('<b>MaqueeSlot:</b>' + calEvent.MSlot));
}
if (calEvent.FSlot == 1) {
$description.append($('<p/>').html('<b>FunctionSlot:</b>' + "Morning"));
}
else if (calEvent.FSlot == 2) {
$description.append($('<p/>').html('<b>FunctionSlot:</b>' + "Evening"));
}
else {
$description.append($('<p/>').html('<b>FunctionSlot:</b>' + calEvent.FSlot));
}
$description.append($('<p/>').html('<b>Booking Persons:</b>' + calEvent.BPerson));
$('#myModal #pDetails').empty().html($description);
var temp = $('#myModal').modal();
},
});
}
【问题讨论】:
-
您可能会发现以下回调和方法对您有用:eventAfterAllRender、clientEvents 和 these articles。
-
我还强烈建议您更改代码以使用 events as JSON feed pattern,这将 a) 简化您的代码,并且 b) 允许您仅下载您在被显示的时间段内实际需要的事件 (因为您的服务器可以通过 fullCalendar 自动提供的开始/结束日期过滤它们)。这反过来将有助于满足您的上述要求,因为您可以搜索更少的事件,并且随着事件的添加/删除/更新,突出显示可以更动态地更新。
-
希望使用上述内容可以更好地尝试解决您的问题。如果您在多次尝试后仍然卡住,请显示您更新的代码,以便我们进一步提供帮助。谢谢。
-
我尝试了几种解决方案,但没有结果。只是想遇到三个以上事件发生的日期,所以我可以让整个单元格的背景颜色发生变化
-
好的,但如果您不向我们展示,我们将无法修复您的尝试。请向我们展示您的最佳尝试。并研究我提供的那些链接——就像我说的那样,它应该给你一个线索来做什么。 (提示:等待所有事件呈现。然后获取页面上所有事件的列表。按日期对这些事件进行分组。对于具有 3 个或更多事件的任何单个日期,更改相应日期单元格的背景颜色。这个逻辑是不复杂。)
标签: jquery html css fullcalendar fullcalendar-3