/ / Czy istnieje sposób zapobiegania nakładającym się zdarzeniom w jQuery FullCalendar? - jquery, fullcalendar

Czy istnieje sposób zapobiegania nakładającym się zdarzeniom w jQuery FullCalendar? - jquery, fullcalendar

Czy istnieje sposób zapobiegania nakładającym się zdarzeniom w jQuery FullCalendar?

Odpowiedzi:

18 dla odpowiedzi № 1

Zrobiłem funkcję, która sprawdza, czy dane zdarzenie nakłada się na inne, czy nie. Zwraca wartość true, jeśli zdarzenie nakłada się na siebie, w przeciwnym razie występuje 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;
}

Możesz go użyć podczas upuszczania lub zmiany rozmiaru izdarzenie i jeśli zdarzenie nakłada się na inne, użyj funkcji revertFunc, która jest odbierana w wywołaniach zwrotnych eventDrop i eventResize lub anuluj tworzenie zdarzenia w wywołaniu zwrotnym. Aby użyć go w wywołaniu zwrotnym, utwórz zdarzenie dummy:

var event = new Object();
event.start = start;
event.end = end;

12 dla odpowiedzi nr 2

Od wersji 2.20 ta zmiana została domyślnie włączona ...

posługiwać się

eventOverlap: false

http://fullcalendar.io/docs/event_ui/eventOverlap/


8 dla odpowiedzi nr 3

Taki sam jak odpowiedź ecruza, ale z logiką, która działała lepiej dla mnie.

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 dla odpowiedzi nr 4

Taki sam jak Matthew Webb, ale Follow pracował dla mnie, ponieważ czasami moja data zakończenia była zerowa, kiedy przeciągałem wydarzenie z allDay do pewnego przedziału czasowego

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 dla odpowiedzi nr 5

Poprostu dodaj

eventOverlap: false

jako jedną z opcji poza elementem zdarzenia.

Możesz również dodać opcję

overlap

do pojedynczego zdarzenia, które zastąpi eventOverlap dla tego pojedynczego zdarzenia.

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 dla odpowiedzi № 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 dla odpowiedzi № 7

po prostu spróbuj tego, działa dobrze dla mnie .... https://fullcalendar.io/docs/event_ui/eventOverlap/

eventOverlap: function(stillEvent, movingEvent) {
return stillEvent.allDay && movingEvent.allDay;
}

0 dla odpowiedzi № 8

Używam wersji 2.11 Fullcalendar i wprowadziłem trochę zmian do kodu opublikowanego przez 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;
}

i w ten sposób zapobiegam nakładaniu się:

    $("#calendar").fullCalendar({
...
eventDrop: function(event, delta, revertFunc) {
if (isOverlapping(event)) {
revertFunc();
}
},
...
});

-3 za odpowiedź № 9

allowCalEventOverlap: [boolean | domyślna: false] - czy kalendarz pozwoli zdarzeniom na nakładanie się. Zdarzenia będą przenoszone lub zmieniane w razie potrzeby, jeśli są przeciągane lub zmieniane na lokalizację, która pokrywa się z innym wydarzeniem kalendarza.

czy tego właśnie szukałeś?


-3 dla odpowiedzi № 10

Spróbuj tego:

$("#calendar").fullCalendar({slotEventOverlap : false});

Zgodnie z dokumentacja.