2010-03-03 2 views

Antwort

-3

allowCalEventOverlap: [boolean | Standardwert: false] - Gibt an, ob der Kalender Ereignisse überlappt. Ereignisse werden bei Bedarf verschoben oder in der Größe geändert, wenn sie an einen Ort gezogen oder deren Größe geändert wird, der ein anderes Kalenderereignis überlappt.

ist das wonach Sie gesucht haben?

+3

Ich denke, das ist für jQuery Week Calendar;) Es funktioniert nicht mit jQuery FullCalendar. – user267637

+0

haha ​​yeah dachte nur das gleiche, sorry. vielleicht ist deine Antwort hier drin; http://code.google.com/p/fullcalendar/issues/detail?id=218 – Eggie

16

Ich habe eine Funktion gemacht, die überprüft, ob das gegebene Ereignis andere überlappt oder nicht. Gibt "true" zurück, wenn das Ereignis sich überlagert, andernfalls "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; 
} 

Sie können es beim Löschen oder Ändern der Größe und Ereignis und wenn das Ereignis überlappt andere Verwendung der revertFunc, die in den eventDrop und eventResize Rückrufe oder brechen Sie die Erstellung eines Ereignisses in der Auswahl Rückruf empfangen wird. Um es in der Auswahl Rückruf zu verwenden, um ein dummie Ereignis erstellen:

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

Es ist wirklich großartig! Es wäre noch schneller, wenn das Array mit 'view.start' und' view.end' 'filter'ed ist. – Thiru

+0

Dies könnte auch helfen, Sonderfall, zeigt aber immer noch, wie man eine Lösung findet: http: // stackoverflow. com/a/29832834/1066234 –

+0

Dies scheint nicht mit dem neuesten Vollkalender zu arbeiten, habe ich stattdessen verwendet: http://StackOverflow.com/a/15804896/1066234 –

8

Gleiche wie ecruz Antwort aber mit Logik, die besser für mich gearbeitet.

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; 
} 
+0

Dies funktioniert tatsächlich im Gegensatz zu Ecruz die Antwort, die nicht funktioniert. – saj

+2

hey! :(Das ist nicht nett – ecruz

0
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(); 
      } 
     } 
    }, 
-2

Try this:

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

Gemäß der documentation.

+2

Das ist nur der visuelle Aspekt :( –

1

Gleiche wie Matthew Webb aber da manchmal für mich gearbeitet nach meiner Enddatum war null, als ich bis zu einem gewissen Zeitfenster das Ereignis aus Allday ziehen

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; 
} 
+0

Und wie benutze ich das? Ich las ecruz Details, ich benutzte es in eventDrop, aber hat nicht funktioniert. – machineaddict

+0

@machineaddict: Sie könnten es auch in eventDrop verwenden wie in eventResize.Es wäre einfacher zu helfen, wenn Sie Ihren Code posten. –

+0

das ist mein Code http://pastebin.com/8jyQwpbH. Wie es jetzt ist, funktioniert sehr gut, außer ich kann Ereignisse haben, die sind Überlappend. – machineaddict

0

Ich bin mit Version 2.11 von Fullcalendar und ich gemacht einige Änderung Code von ecruz posted:

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; 
} 

und das ist, wie ich die Überlappung zu verhindern verwenden:

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

Gerade

eventOverlap: false 

als eine Ihrer Optionen außerhalb des Events Element hinzufügen.

Sie können auch die Option hinzufügen

overlap 

auf ein einziges Ereignis, das die eventOverlap auf diesem einzelnen Fall wird außer Kraft setzen.

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 
Verwandte Themen