Чи є спосіб запобігти поєднанню подій у jQuery FullCalendar?
Відповіді:
18 за відповідь № 1Я зробив функцію, яка перевіряє, чи дана подія перекриває інше чи ні. Повертає true, якщо подія перекриває інше та false в іншому випадку.
function isOverlapping(event){
var array = calendar.fullCalendar("clientEvents");
for(i in array){
if(array[i].id != event.id){
if(!(Date(array[i].start) >= Date(event.end) || Date(array[i].end) <= Date(event.start))){
return true;
}
}
}
return false;
}
Ви можете використовувати його при скидання або зміни розміру іякщо подія перекриває інше, використовуйте функцію revertFunc, отриману в eventdrop і eventResize, або скасуйте створення події у виділеному зворотному дзвінку. Для того, щоб використовувати його в обраному зворотному дзвінку, створіть подію dummie:
var event = new Object();
event.start = start;
event.end = end;
12 для відповіді № 2
З версії 2.20 ця зміна була включена за замовчуванням ...
використовувати
eventOverlap: false
http://fullcalendar.io/docs/event_ui/eventOverlap/
8 за відповідь № 3
Так само, як відповідь Екруза, але з логікою, яка працювала для мене краще.
function isOverlapping(event){
// "calendar" on line below should ref the element on which fc has been called
var array = calendar.fullCalendar("clientEvents");
for(i in array){
if (event.end >= array[i].start && event.start <= array[i].end){
return true;
}
}
return false;
}
1 для відповіді № 4
Так само, як і Меттью Уебб, але наступний працював для мене, оскільки іноді моя кінцева дата була нульовою, коли я перетягував подію з усіх днів до деякого часового інтервалу
function isOverlapping(event) {
var arrCalEvents = $("#" + g_str_FullCalenderID).fullCalendar("clientEvents");
for (i in arrCalEvents) {
if (arrCalEvents[i].id != event.id) {
if ((event.end >= arrCalEvents[i].start && event.start <= arrCalEvents[i].end) || (event.end == null && (event.start >= arrCalEvents[i].start && event.start <= arrCalEvents[i].end))) {//!(Date(arrCalEvents[i].start) >= Date(event.end) || Date(arrCalEvents[i].end) <= Date(event.start))
return true;
}
}
}
return false;
}
1 для відповіді № 5
Просто додати
eventOverlap: false
як один із ваших варіантів поза елементами подій.
Ви також можете додати варіант
overlap
до єдиної події, яка замінить eventOverlap на цій окремій події.
events: [
{
title : "event1",
start : "2017-05-27"
},
{
title : "event2",
start : "2017-05-28",
end : "2017-05-29"
},
{
title : "event3",
start : "2017-05-30T12:30:00",
allDay : false, // will make the time show
draggable: true,
editable: true,
overlap: true,
},
{
title : "event3",
start : "2017-05-30T09:30:00",
allDay : false, // will make the time show
draggable: true,
editable: true,
}
],
eventOverlap: false
0 для відповіді № 6
eventResize: function (event, dayDelta, minuteDelta, revertFunc, jsEvent, ui, view) {
var start = new Date(event.start);
var end = new Date(event.end);
var events = event.source.events;
for (var i = 0; i < events.length; i++) {
var someEvent = events[i];
if (someEvent._id == event._id)
{
continue;
}
var seStart = new Date(someEvent.start);
var seEnd = new Date(someEvent.end);
if ((start < seEnd) && (seStart < end)) {// dates overlap
revertFunc();
}
}
},
0 для відповіді № 7
просто спробуй це, добре працює для мене .... https://fullcalendar.io/docs/event_ui/eventOverlap/
eventOverlap: function(stillEvent, movingEvent) {
return stillEvent.allDay && movingEvent.allDay;
}
0 для відповіді № 8
Я використовую версію 2.11 Fullcalendar, і я зробив деякі зміни в коді, розміщеному ecruz:
function isOverlapping(event){
var array = calendar.fullCalendar("clientEvents");
for(i in array){
if(array[i]._id != event._id){
if(!(array[i].start.format() >= event.end.format() || array[i].end.format() <= event.start.format())){
return true;
}
}
}
return false;
}
і це я використовую, щоб запобігти перекриттю:
$("#calendar").fullCalendar({
...
eventDrop: function(event, delta, revertFunc) {
if (isOverlapping(event)) {
revertFunc();
}
},
...
});
-3 для відповіді № 9
allowCalEventOverlap: [булевий | за замовчуванням: false] - чи календар дозволить поєднати події. Події будуть перенесені або змінюватися при необхідності, якщо вони будуть перетягнені або змінені до розміру, який перекриває іншу подію календаря.
це те, що ви шукали?
-3 для відповіді № 10
Спробуйте це:
$("#calendar").fullCalendar({slotEventOverlap : false});
Відповідно до документація.