Double Booking Prevention
Sometimes it is necessary to guarantee that events don't overlap - eg. when scheduling workorders, interacting with a work calendar. You can reject the updates or additions and let the user know about it.
The event overlap can be turned on/off on an event basis or globally on the instance.
- On an event basis - by setting the
overlapproperty tofalsethe specified event cannot overlap. - Globally on the instance - by setting
eventOverlapoption tofalseoverlap is disbled globally.
If set to false, the event settings have precedence over the global calendar eventOverlap option.
Give feedback to the user - optionally, a toast can be displayed to explain why an event cannot be dropped, moved or created. For this we can use the onEventCreateFailed and onEventUpdateFailed lifecycle events.
Demo
eventOverlap=falsemobiscroll.eventcalendar('#calendar', {
view: {calendar: { type: 'month', labels: 'all' }},
// relevant events
data: [{
start: '2026-10-21T00:00',
end: '2026-10-23T00:00',
title: 'Event 2 (no event overlap)',
overlap: false
}, {
start: '2026-10-26T00:00',
end: '2026-10-28T00:00',
title: 'Event 4 (no event overlap)',
overlap: false
}],
dragToMove: true,
dragToResize: true,
clickToCreate: true,
dragToCreate: true,
eventOverlap: true ,
exclusiveEndDates: true,
});

mobiscroll.setOptions({
locale: ,
theme: ' ',
themeVariant: ' '
});
function onEventFailed() {
mobiscroll.toast({
message: 'Make sure not to double book',
});
}
var now = new Date();
var y = now.getFullYear();
var m = now.getMonth();
var d = now.getDate();
mobiscroll.eventcalendar('#demo', {
view: {
calendar: { type: 'month', labels: 'all' },
},
clickToCreate: true,
dragToCreate: true,
dragToMove: true,
dragToResize: true,
eventOverlap: false,
exclusiveEndDates: true,
data: [
{
start: new Date(y, m, d - 3),
end: new Date(y, m, d - 1),
title: 'Event 1',
},
{
start: new Date(y, m, d),
end: new Date(y, m, d + 2),
title: 'Event 2 (no event overlap)',
overlap: false,
},
{
start: new Date(y, m, d + 3),
end: new Date(y, m, d + 5),
title: 'Event 3',
},
{
start: new Date(y, m, d + 5),
end: new Date(y, m, d + 7),
title: 'Event 4 (no event overlap)',
overlap: false,
},
],
onEventUpdateFailed: onEventFailed,
onEventCreateFailed: onEventFailed,
});
<div id="demo"></div>