我有一个包含正常事件和allDay事件的fullcalendar。
我想禁用allDay事件,使其无法在议程视图中拖入正常事件。
allday事件从开始时设置了开始时间和结束时间,因此我无法检查结束时间是否为空。
也许在eventDrop函数中有一种方法可以阻止它的发生?
答案 0 :(得分:3)
检查这个小提琴:http://jsfiddle.net/100thGear/GPx28/
需要注意的一些要点:
allDay
回调中的eventDrop
参数不代表事件的allDay。它代表 广告位 allDay的能力。因此,在周视图中,顶部栏的allDay
为true
,下面的时间段allDay
为false
。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 {
}
},