Copying Events in Kendo UI for jQuery Scheduler
Environment
| Product | Kendo UI for jQuery Scheduler |
| Version | 2026.1.212 |
Description
I want to copy an event in the Kendo UI for jQuery Scheduler by dragging it while holding the Ctrl key. However, when using the inline mode, the drag-and-drop functionality behaves differently compared to full-screen mode. Additionally, after copying an event, moving the copied event moves the original event instead. When copying events, no create or update request is sent to the server, but moving the new event triggers the update request correctly.
This knowledge base article also answers the following questions:
- How to copy events in Kendo UI for jQuery Scheduler using Ctrl key?
- Why does moving the copied event in Scheduler move the original event?
- How to fire server requests when copying events in Kendo UI Scheduler?
Solution
Fullscreen vs Inline Mode Behavior
The difference between fullscreen and inline modes arises due to iframe isolation in the Dojo runner. Test outside the Dojo environment for accurate results.
Moving the Copied Event Moves the Original
Ensure a completely cloned event by:
- Creating a deep copy of the original event object.
- Removing properties such as
uid,id, andtaskIdfrom the cloned object. - Adding the cloned event to the Scheduler's
dataSource.
Use the following code:
moveEnd: function(e) {
if (ctrlKey) {
var scheduler = $("#scheduler").data("kendoScheduler");
var originalEvent = e.event;
var newEvent = $.extend({}, originalEvent.toJSON());
delete newEvent.uid;
delete newEvent.id;
delete newEvent.taskId;
newEvent.start = e.start;
newEvent.end = e.end;
scheduler.dataSource.add(newEvent);
scheduler.dataSource.sync();
e.preventDefault(); // Prevent moving the original event
}
}
Sending Server Requests When Copying Events
To ensure that a create request is fired when copying events, define a new event object explicitly:
moveEnd: function(e) {
if (ctrlKey) {
var scheduler = $("#scheduler").data("kendoScheduler");
var newEvent = {
title: e.event.title,
start: e.start,
end: e.end,
ownerId: e.event.ownerId
};
scheduler.dataSource.add(newEvent);
scheduler.dataSource.sync();
e.preventDefault();
}
}
For a runnable example please refer to this Demo.
Both approaches resolve the issue with copying events, ensuring correct behavior and server transactions.