1

我有一个包含正常事件和 allDay 事件的完整日历。

我想禁止 allDay-events 被拖到议程视图中的正常事件中。

全天事件从一开始就设置了开始时间和结束时间,所以我无法检查结束时间是否为空。

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

4

4 回答 4

3

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

需要注意的几点:

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

希望这可以帮助!

于 2012-07-06T23:57:41.527 回答
2

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

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

eventDrop: function(event, dayDelta, minuteDelta, allDay, revertFunc) {
    if (event.forceAllDay && !allDay) {
        revertFunc();
    } else {
        if (!confirm('Move event?')) {
            revertFunc();
        } else {
            // UPDATE DATABASE
        }
    }
}
于 2013-12-12T12:59:38.890 回答
0

您可以检查 endtime 是否为空。希望能帮助到你

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

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

    }
},
于 2018-01-21T02:33:04.863 回答
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();
    }
};
于 2016-08-23T09:26:46.363 回答