Fullcalendar拖放allday

时间:2012-07-06 18:59:29

标签: jquery events jquery-plugins fullcalendar

我有一个包含正常事件和allDay事件的fullcalendar。

我想禁用allDay事件,使其无法在议程视图中拖入正常事件。

allday事件从开始时设置了开始时间和结束时间,因此我无法检查结束时间是否为空。

也许在eventDrop函数中有一种方法可以阻止它的发生?

4 个答案:

答案 0 :(得分:3)

检查这个小提琴:http://jsfiddle.net/100thGear/GPx28/

需要注意的一些要点:

  • allDay回调中的eventDrop参数不代表事件的allDay。它代表 广告位 allDay的能力。因此,在周视图中,顶部栏的allDaytrue,下面的时间段allDayfalse
  • event回调中的eventDrop参数具有更新的日期/时间。因此,如果您将事件从allDay插槽移至上午6:30插槽,则此回调中的事件开始实际上会说 6:30:00 。所以,我在拖动开始时(通过eventDragStart回调)将拖动事件的allDay参数存储在变量中
  • 事件的id属性确定它是否是可重复的事件。在你的小提琴中,allDay事件和普通事件都具有相同的id - 这将使你的拖动操作复杂化。如果可以,请避免这种情况。
  • 最后,我认为您知道这一点,但在事件被删除后的正确回调称为eventDrop - 而不仅仅是丢弃。

希望这有帮助!

答案 1 :(得分:2)

有点晚了,但我遇到了类似的问题。我的一些allDay事件需要修复,其他事件则没有。我的解决方案是为每个名为“forceAllDay”的事件添加一个用户定义的值,并将其设置为true或false。

然后在事件drop部分添加了这个:

eventDrop: function(event, dayDelta, minuteDelta, allDay, revertFunc) {
    if (event.forceAllDay && !allDay) {
        revertFunc();
    } else {
        if (!confirm('Move event?')) {
            revertFunc();
        } else {
            // UPDATE DATABASE
        }
    }
}

答案 2 :(得分:0)

根据他们最新的API 2.xx,您可以这样做:

var draggedEventIsAllDay
var eventDragStart = function(ev) {
    draggedEventIsAllDay = ev.allDay;
};

var eventDrop = function(ev, delta, revertFunc, jsEvent, ui, view) {
    var data = delta._data,
        dayDelta = data.days,
        minuteDelta = data.minutes,
        allDay;

    var start = jQuery.fullCalendar.moment(ev.start.format('MM-DD-YYYY'));

    if (start.hasTime()) {
        allDay = false;
    } else {
        allDay = true;
    }


    if (!allDay && draggedEventIsAllDay || allDay && !draggedEventIsAllDay) {
        revertFunc();
    }
};

答案 3 :(得分:0)

您可以随时检查endtime是否为null。希望它有所帮助

eventDrop: function(event, delta, revertFunc) {
    var m = $.fullCalendar.moment(event.end);

    if (!m.hasTime() && !event.allDay)
        revertFunc(); 
    else {

    }
},