How can I help you?
Appointments in JavaScript Scheduler control
Appointments in the Scheduler represent events scheduled for specific time periods. Each appointment can be configured for various time ranges and categorized based on its duration and recurrence pattern. The Scheduler supports the following appointment types:
- Normal events
- Spanned events
- All-day events
- Recurring events
Normal events
Normal events are appointments scheduled within a specific time interval on a single day.
Creating a normal event
Here’s an example of how to create a normal event in the Scheduler using simple JSON data:
Spanned events
Spanned events are appointments that extend beyond 24 hours. By default, these events display in the all-day row. This category also includes events spanning multiple days but lasting less than 24 hours, which appear appropriately on both days.
For example, an appointment scheduled from November 25, 2018, at 11:00 PM to November 26, 2018, at 2:00 AM (spanning less than 24 hours) will be split and displayed across both days.
Customize the rendering of the spanned events
By default, the Scheduler renders spanned events (appointments lasting more than 24 hours) in the all-day row. To display these events within work cells instead, set the spannedEventPlacement option to TimeSlot within the eventSettings property. The following example demonstrates this customization:
All-day events
All-day events are appointments that occupy an entire day, such as holidays or full-day conferences. These events typically display in a separate all-day row below the date header section. In Timeline views, all-day appointments appear within the main content area since these views do not include a separate all-day row.
To designate a normal appointment as an all-day event, set the
isAllDayfield to true.
Hide all-day row events
The all-day row appointments can be hidden from the Scheduler UI using CSS customization:
<style>
.e-schedule .e-date-header-wrap .e-schedule-table thead {
display: none;
}
</style>The all-day row supports scrolling functionality. For more information, refer to the enable scroll option on all-day section documentation.
Expand all day appointments view on initial load
When numerous appointments exist in the all-day view, the dataBound event can be utilized to automatically display all all-day events on initial load, eliminating the need for users to manually click the expand toggle.
Recurring events
Recurring events are appointments that repeat at regular intervals according to a defined recurrence rule. These events can recur daily, weekly, monthly, or yearly, and are typically indicated by a repeat marker icon at the bottom-right corner of the appointment.
Creating a recurring event
The following example demonstrates how to create a recurring event in the Scheduler with a specific recurrenceRule. In this example, an event recurs daily and ends after 5 occurrences:
Adding exceptions
Specific dates can be excluded from a recurrence series by adding them to the recurrenceException field. Exception dates must be provided in ISO date-time format without hyphens (-) separating date elements.
For example, February 22, 2018, should be represented as “20180222”. The time component in UTC format requires a “Z” suffix without spaces. For instance, “07:30:00 UTC” becomes “073000Z”.
Editing an occurrence from a series
To edit a particular occurrence from an event series and display it on the initial Scheduler load, add the edited occurrence as a new event to the dataSource collection. Include an additional recurrenceID field that references the ID value of the parent event.
In the following example, a recurring instance appearing on January 30, 2018, is modified with alternative timings. This date is removed from the parent repeating event (running from January 28 to February 4, 2018) by populating the recurrenceException field on the parent event with the excluded date value. The edited occurrence, created as a new event, includes a recurrenceID field that references the parent event’s Id value.
Edit only the current and following events
To edit only the current and following events in a recurring series, enable the editFollowingEvents property within eventSettings. Add the edited occurrence as a new event to the dataSource collection with an additional followingID field that references the ID value of the immediate parent event.
In the following example, a recurring instance appearing on January 30, 2018, and all following dates are modified with a different subject. These dates are removed from the parent repeating event (repeating from January 28 to February 4, 2018) by modifying the recurrenceRule field on the parent event with an until date value. The updated events, created as new events, include a followingID field that references the immediate parent event’s Id value.
Recurrence options and rules
Events can repeat on daily, weekly, monthly, or yearly bases using recurrence rules. The following details must be assigned to the recurrenceRule property to generate recurring instances:
- Repeat type (daily/weekly/monthly/yearly)
- Repetition frequency
- Interval duration
- Time period for rendering the appointment
Four repeat types are available:
- Daily - Creates recurring instances on a daily basis.
- Weekly - Creates recurring instances on a weekly basis for selected days.
- Monthly - Creates recurring instances on a monthly basis for selected months and other specified recurrence criteria.
- Yearly - Creates recurring instances on a yearly basis.
Recurrence properties
The following table describes the properties used to create recurrence appointments with their respective time periods. Valid rule strings can be referenced from iCalendar specifications.
Refer to iCalendar specifications for valid recurrence rule string formats.
| Property | Purpose | Example |
|---|---|---|
| FREQ | Maintains the repeat type (Daily, Weekly, Monthly, Yearly) value of the appointment. | FREQ=DAILY;INTERVAL=1 |
| INTERVAL | Maintains the interval value of the appointments. When you create the daily appointment at an interval of 2, the appointments are rendered on the days Monday, Wednesday and Friday (Creates an appointment on all days by leaving the interval of one day gap). | FREQ=DAILY;INTERVAL=2 |
| COUNT | It holds the appointment’s count value. When the COUNT value is 10, then 10 instances of appointments are created in the recurrence series. | FREQ=DAILY;INTERVAL=1;COUNT=10 |
| UNTIL | This property holds the end date value (in ISO format) denoting when the recurrence actually ends. | FREQ=DAILY;INTERVAL=1;UNTIL=20180530T041343Z; |
| BYDAY | It holds the day value(s), representing on which the appointments actually renders. Create the weekly appointment, and select the day(s) from the day options (Monday/Tuesday/Wednesday/Thursday/Friday/Saturday/Sunday). When Monday is selected, the first two letters of the selected day “MO” is saved in the BYDAY property. When multiple days are selected, the values are separated by commas. | FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE;COUNT=10 |
| BYMONTHDAY | This property is used to store the date value of the Month, while creating the Month recurrence appointment. When you create a Monthly recurrence appointment for every 3rd day of the month, then BYMONTHDAY holds the value 3 and creates the appointment on 3rd day of every month. | FREQ=MONTHLY;BYMONTHDAY=3;INTERVAL=1;COUNT=10 |
| BYMONTH | This property is used to store the index value of the selected Month while creating the yearly appointments. When you create the yearly appointment on June month, the index value of June month 6 will get stored in the BYMONTH field. The appointment is created on every 6th month of a year. | FREQ=YEARLY;BYMONTHDAY=16;BYMONTH=6;INTERVAL=1;COUNT=10 |
| BYSETPOS | This property is used to store the index value of the week. When you create the monthly appointment in second week of a month, the index value of the second week (2) is stored in BYSETPOS. | FREQ=MONTHLY;BYDAY=MO;BYSETPOS=2;COUNT=10 |
The default recurrence validation for appointments follows Outlook-style validation. This validation occurs during the creation, editing, dragging, dropping, or resizing of recurrence appointments, and when any single occurrence is modified.
Daily Frequency
| Description | Example |
|---|---|
| Daily recurring event that never ends | FREQ=DAILY;INTERVAL=1 |
| Daily recurring event that ends after 5 occurrences | FREQ=DAILY;INTERVAL=1;COUNT=5 |
| Daily recurring event that ends exactly on 12/12/2018 | FREQ=DAILY;INTERVAL=1;UNTIL=20181212T041343Z |
| Daily event that recurs on alternative days and repeats for 10 occurrences | FREQ=DAILY;INTERVAL=2;COUNT=10 |
Weekly Frequency
| Description | Example |
|---|---|
| Weekly recurring event that repeats on every Monday, Wednesday and Friday and never ends | FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,FR |
| Repeats every week Thursday and ends after 10 occurrences | FREQ=WEEKLY;INTERVAL=1;BYDAY=TH; COUNT=10 |
| Repeats every week Monday and ends on 12/12/2018 | FREQ=WEEKLY;INTERVAL=1;BYDAY=MO; UNTIL=20181212T041343Z |
| Repeats on Monday, Wednesday and Friday of alternative weeks and ends after 10 occurrences | FREQ=WEEKLY;INTERVAL=2;BYDAY=MO,WE,FR;COUNT=10 |
Monthly Frequency
| Description | Example |
|---|---|
| Monthly recurring event that repeats on every 15th day of a month and never ends | FREQ=MONTHLY; BYMONTHDAY=15;INTERVAL=1 |
| Monthly recurring event that repeats on every 16th day of a month and ends after 10 occurrences | FREQ=MONTHLY;BYMONTHDAY=16;INTERVAL=1;COUNT=10 |
| Repeats every 17th day of a month and ends on 12/12/2018 | FREQ=MONTHLY;BYMONTHDAY=17; INTERVAL=1;UNTIL=20181212T041343Z |
| Repeats every 2nd Friday of a month and never ends | FREQ=MONTHLY;BYDAY=FR;BYSETPOS=2; INTERVAL=1 |
| Repeats every 4th Wednesday of a month and ends after 10 occurrences | FREQ=MONTHLY;BYDAY=WE; BYSETPOS=4;INTERVAL=1;COUNT=10 |
| Repeats every 4th Friday of a month and ends on 12/12/2018 | FREQ=MONTHLY;BYDAY=FR;BYSETPOS=4; INTERVAL=1;UNTIL=20181212T041343Z; |
Yearly Frequency
| Description | Example |
|---|---|
| Yearly event that repeats on every 15th day of December month and never ends | FREQ=YEARLY; BYMONTHDAY=15;BYMONTH=12;INTERVAL=1 |
| Event that repeats on every 10th day of December month and ends after 10 occurrences | FREQ=YEARLY; BYMONTHDAY=10;BYMONTH=12;INTERVAL=1;COUNT=10 |
| Repeats on every 12th day of December month and ends on 12/12/2025 | FREQ=YEARLY;BYMONTHDAY=12; BYMONTH=12;INTERVAL=1;UNTIL=20251212T041343Z |
| Repeats on every 3rd Friday of December month and never ends | FREQ=YEARLY;BYDAY=FR;BYMONTH=12; BYSETPOS=3;INTERVAL=1 |
| Repeats on every 3rd Tuesday of December month and ends after 10 occurrences | FREQ=YEARLY; BYDAY=TU;BYMONTH=12;BYSETPOS=3;INTERVAL=1;COUNT=10 |
| Repeats on every 4th Wednesday of December month and ends on 12/12/2028 | FREQ=YEARLY;BYDAY=WE; BYMONTH=12;BYSETPOS=4;INTERVAL=1;UNTIL=20281212T041343Z |
Recurrence Validation
Built-in validation support is enabled by default for recurring appointments during creation, editing, drag and drop, and resize actions. The following validation alerts may display in the Scheduler when creating or editing recurring events:
| Validation messages | Description |
|---|---|
| The recurrence pattern is not valid. | This alert will raise, when the selected recurrence rule value is not a valid one. For example, when you try to select the end date value (using Until option) for a recurring event, which occurs before the start date, an alert will popup out saying that the chosen pattern is invalid. |
| The changes made to specific instances of this series will be cancelled and those events will match the series again. | This alert will raise, when you try to edit the whole series, whose occurrence might have been already edited. For example, If there are five occurrences and one of the occurrence is already edited. Now, when you try to edit the entire series, you will get this validation alert. |
| The duration of the event must be shorter than how frequently it occurs. Shorten the duration, or change the recurrence pattern in the recurrence event editor. | This validation will occur, if the event duration is longer than the selected frequency. For example, if you create a recurring appointment with two days duration in Daily frequency with no intervals set to it, you may get this alert. |
| Some months have fewer than the selected date. For these months, the occurrence will fall on the last date of the month. | When you try to create a recurring appointment on 31st of every month, where few months won’t have 31 days and in this scenario, you will get this alert. |
| Two occurrences of the same event cannot occur on the same day. | This validation will occur, when you try to edit or move any single occurrence to some other date, where another occurrence of the same event is already present. |
Event fields
The Scheduler dataSource contains event instances, where each instance includes a collection of appropriate fields. When binding remote data, these fields must be mapped to their equivalent database fields. For local JSON data, the field names defined within instances must be correctly mapped with the Scheduler event fields.
To create an event in the Scheduler, defining
startTimeandendTimeis sufficient. Theidfield becomes mandatory for processing CRUD actions on appropriate events.
Built-in fields
The built-in fields available on Scheduler event objects are as follows:
| Field name | Description |
|---|---|
| id | The id field needs to be defined as mandatory and this field usually assigns a unique ID value to each of the events. |
| subject | The subject field is optional, and usually assigns the summary text to each of the events. |
| startTime | The startTime field defines the start time of an event and it is mandatory to provide it for any of the valid event objects. |
| endTime | The endTime field defines the end time of an event and it is mandatory to provide the end time for any of the valid event objects. |
| startTimezone | It maps the startTimezone field from the dataSource and usually accepts the valid IANA timezone names. It is assumed that the value provided for this field is taken into consideration while processing the startTime field. When this field is not mapped with any timezone names, then the events will be processed based on the timezone assigned to the Scheduler. |
| endTimezone | It maps the endTimezone field from the dataSource and usually accepts the valid IANA timezone names. It is assumed that the value provided for this field is taken into consideration while processing the endTime field. When this field is not mapped with any timezone names, then the events will be processed based on the timezone assigned to the Scheduler. |
| location | It maps the location field from the dataSource and the location text value will be displayed over the events. |
| description | It maps the description field from the dataSource and denotes the event description which is optional. |
| isAllDay | The isAllDay field is mapped from the dataSource and is used to denote whether an event is created for an entire day or for specific time alone. Usually, an event with isAllDay field set to true will be considered as an all-day event. |
| recurrenceID | It maps the recurrenceID field from dataSource and usually holds the ID value of the parent recurrence event. This field is applicable only for the edited occurrence events. |
| recurrenceRule | It maps the recurrenceRule field from dataSource and holds the recurrence rule value in a string format. Also, it uniquely identifies whether the event belongs to a recurring type or normal ones. |
| recurrenceException | It maps the recurrenceException field from dataSource and is used to hold the collection of exception dates, on which the recurring occurrences needs to be excluded. The recurrenceException should be specified in UTC format. |
| isReadonly | It maps the isReadonly field from dataSource. It is mainly used to make specific appointments as readonly when set to true. |
| isBlock | It maps the isBlock field from dataSource. It is used to block the particular time ranges in the Scheduler and prevents the event creation on those time slots. |
Binding different field names
When event instances have default mapping names, manual mapping is unnecessary. However, if the Scheduler’s dataSource contains events with different field names, mapping them to their equivalent field names within the eventSettings property becomes necessary.
The mapper field
idis of string type with no additional validation options, whereas all other fields are ofObjecttype with additional options available.
Event field settings
Each Scheduler event field includes additional settings, such as options to set default values, map to appropriate dataSource fields, validate each event field, and provide label values for the event window.
| Options | Description |
|---|---|
| default | Accepts the default value to the applicable fields (Subject, Location and Description), when no values are provided to them from dataSource. |
| name | Accepts the field name to be mapped from the dataSource fields. |
| title | Accepts the label values to be displayed for the fields of event editor. |
| validation | Defines the validation rules to be applied on the event fields within the event editor. |
In the following example, the Subject field in the event editor displays the label Summary. If no subject value is provided when saving an event, the appointment is saved with the default subject value Add Summary.
Adding Custom fields
In addition to default Scheduler fields, any number of custom fields can be included for appointments. The following code example demonstrates how to incorporate two custom fields, Status and Priority, within the event collection. Binding custom fields within eventSettings is optional; however, these additional fields can be easily accessed for internal processing and from the application end.
Customize the order of the overlapping events
By default, the Scheduler renders overlapping events based on their start and end times. The order of overlapping events can be customized using the sortComparer property within the eventSettings property. The following code example demonstrates how to sort appointments based on a custom field:
Preventing Overlapping Events
By default, the Scheduler displays overlapping events according to their start and end times. To prevent overlapping, set the allowOverlap property to false.
When this property is set to false, any new or updated events overlapping with existing ones will trigger an overlap alert. Overlapping events are collected in the overlapEvents property within the PopupOpenEventArgs.
When allowOverlap is set to false, the Scheduler behaves as follows:
Initial Load Behavior: Upon initial loading, the Scheduler prioritizes non-overlapping events based on duration and all-day status. Events with longer durations and all-day designations receive higher priority to ensure no overlaps.
Recurring Appointments: If conflicts exist within a recurring appointment series during initial load, the Scheduler displays all occurrences except the conflicting instance.
Event Modifications: When users edit, save, or remove appointments, the Scheduler checks for potential overlaps. If a conflict is detected, the action is blocked, and a conflict alert is displayed to the user.
Dynamic Recurrence Series Creation or Editing: When users create or edit a recurrence series dynamically, the Scheduler prevents any occurrences from being added if a conflict is found within the series.
The following code example demonstrates how to enable the allowOverlap property:
Limitations
The allowOverlap property checks for event overlaps only within the currently visible date range. Events scheduled outside the rendered date range are not included in the overlap check by default.
To check for overlaps with events outside the visible date range, leverage the promise field within the actionBegin event to validate all events before proceeding. By implementing a custom validation method inside the actionBegin event, the result (a boolean) can be assigned to the promise field. If the result is true, the action (e.g., adding or saving the event) proceeds; if false, the action is blocked.
Additionally, the public method openOverlapAlert can be used to display an alert popup whenever an overlap occurs and the result is false.
The following code example demonstrates how to check for overlaps when adding an event. If an overlap is found, the event is not added, and an alert is displayed:
Drag and drop appointments
Appointments can be rescheduled to any time by dragging and dropping them to the desired location. To use drag-and-drop functionality, inject the DragAndDrop module and ensure allowDragAndDrop is set to true (the default value). In mobile mode, tap and hold an event, then drop it at the desired location.
By default, drag-and-drop is available in all Scheduler views except
Agenda,Month-Agenda, andYearviews.
Drag and drop multiple appointments
Multiple appointments can be dragged and dropped by enabling the allowMultiDrag property. Select multiple appointments by holding the CTRL key, then release it and begin dragging the events.
Multiple events can also be dragged from one resource to another. If all selected events belong to different resources, they will all be moved to the single resource associated with the target event.
Note: Dragging and dropping multiple events is not supported on mobile devices.
Disable the drag action
By default, events can be dragged and dropped within any applicable Scheduler view. To disable this functionality, set the allowDragAndDrop property to false.
Preventing drag and drop on specific targets
Drag actions on specific targets can be prevented by specifying the target to exclude in the excludeSelectors option within the dragStart event. In the following example, drag actions are prevented on the all-day row:
Disable scrolling on drag action
By default, when dragging an appointment to the edges (top or bottom in vertical Scheduler, or left or right in timeline Scheduler), automatic scrolling occurs. To prevent this scrolling action, set the scroll value to false within the dragStart event arguments.
Controlling scroll speed while dragging an event
The scrolling speed while dragging an appointment to the Scheduler edges can be controlled within the dragStart event by setting desired values for scrollBy and timeDelay options. Default values are 30 minutes for scrollBy and 100 ms for timeDelay.
Auto navigation of date ranges on dragging an event
When an event is dragged to either the left or right extreme edges of the Scheduler and held for a few seconds without dropping, auto-navigation of date ranges can be enabled. This allows the Scheduler to navigate back and forth between the current date range. By default, this action is set to false. To enable it, set navigation to true within the dragStart event.
By default, the navigation delay is set to 2000 ms, determining how long a user must drag and hold appointments at the extremities. A custom delay value can be set using the timeDelay option within the dragStart event.
Setting drag time interval
By default, when dragging an appointment, it moves in 30-minute intervals. To change the dragging time interval, pass appropriate values to the interval option within the dragStart event.
Drag and drop items from external source
It is possible to drag and drop unplanned items from any external source into the scheduler by manually saving the dropped items as new appointment data using the addEvent method of the scheduler.
In the following example, the tree view control serves as the external source, with child nodes dragged and dropped onto the Scheduler. The [nodeDragStop] event of the TreeView component is utilized to create an event object and save it using the addEvent method.
Opening the editor window on drag stop
In scenarios where opening the editor filled with data at a newly dropped location is desired, proceeding to save only when the Save button is clicked, and reverting changes when Cancel is clicked, use the dragStop event of the Scheduler.
Inline Appointment
The Scheduler provides inline Add/Edit support for managing appointment subjects directly. This feature enables users to quickly manage appointments without opening a separate dialog.
To add an appointment inline:
- Single-click on any Scheduler cell or press enter on selected cells.
- A text box appears within the clicked cell with a blinking cursor.
- Enter the appointment subject.
- Press enter to save the appointment.
To edit an appointment inline:
- Single-click on an existing appointment’s subject.
- The subject becomes editable.
- Make changes.
- Press enter to update the appointment.
Enable or disable this feature using the allowInline property, which is set to false by default.
Important notes:
- When
allowInlineis enabled,showQuickInfois turned off. - The quick popup does not appear when clicking on a work cell or appointment if
allowInlineis set totrue. - In work cells, multiple cells can be selected using the keyboard, then press enter to create an appointment wrapper.
- Be aware of potential overlapping scenarios when creating inline events.
Normal Event
For editing appointments, single-click the appointment subject. The editable option is enabled in the UI with cursor focus at the text end. Inline editing is available for all possible views.
Recurrence Event
When editing an occurrence from a recurrence series, only a single occurrence can be edited, not the entire series.
Appointment Resizing
Another way to reschedule appointments is by resizing them. To use resizing functionality, inject the Resize module and ensure the allowResizing property is set to true (the default value).
Disable the resize action
By default, resizing events is allowed on all Scheduler views except Agenda and Month-Agenda view. To disable event resizing, set allowResizing to false.
Disable scrolling on resize action
By default, when resizing an appointment and its handler reaches the edge of the Scheduler, scrolling occurs along with event resizing. To prevent this scrolling action, set the scroll value to false within the resizeStart event.
Controlling scroll speed while resizing an event
The scrolling speed when resizing an appointment to the Scheduler edges can be controlled by setting the desired value for the scrollBy option within the resizeStart event.
Setting resize time interval
By default, when resizing an appointment, it extends or shrinks at 30-minute intervals. To change this default resize interval, set appropriate values to the interval option within the resizeStart event.
Appointment customization
The Scheduler provides multiple approaches to customize the appearance of appointments. Use the most appropriate method based on requirements:
- Customize appointments using templates
- Customize appointments using using eventRendered event
- Customize appointments using CSS classes
Using template
Add text, images, and links to customize the appearance of events. Use the template option within the eventSettings property to format and change the default appearance of events. The following example customizes the appointment’s default color and time format:
All built-in fields mapped to appropriate field properties within
eventSettings, as well as custom mapped fields from the Scheduler dataSource, can be accessed within the template code.
Customize appointments using eventRendered event
The eventRendered event triggers before an appointment is rendered on the Scheduler. Use this client-side event to customize the appearance of appointments based on specific criteria before rendering them.
Customize appointments using CSS classes
You can also customize event appearance using the cssClass property of the Scheduler. The following example changes the background of appointments using cssClass:
Setting minimum height
You can set a minimal height for appointments on the Scheduler using the eventRendered event when the start and end time duration is less than the default duration of a single slot.
Block Dates and Times
Block a set of dates or specific time ranges on the Scheduler by defining an appointment object within eventSettings with the required time range and setting the isBlock field to true. Appointments with the isBlock field set to true will prevent users from creating new appointments, dragging existing appointments, or resizing appointments within the specified time ranges defined by startTime and endTime fields.
Block appointments can also be defined to repeat on several days as shown in the following code example.
Readonly
Enable or disable interaction with Scheduler appointments using the readonly property. When enabled, navigation between Scheduler dates and views is allowed, and appointment details can be viewed in the quick info window. However, CRUD actions cannot be performed on the Scheduler. By default, this property is set to false.
Make specific events readonly
In some scenarios, CRUD actions on specific appointments may need to be restricted based on certain conditions. For example, past appointments can be made readonly. This can be achieved by setting the isReadonly field of readonly appointments to true.
By default, the event editor is prevented from opening on readonly events when the
isReadonlyfield is set totrue.
Restricting appointment creation on specific time slots
Restrict users from creating and updating more than one appointment on specific time slots using the Scheduler’s public method isSlotAvailable. CRUD actions also be disabled on occupied time slots using the Scheduler’s public method isSlotAvailable.
The isSlotAvailable method focuses on verifies appointments within the current view’s date range. It does not evaluate availability for recurrence occurrences outside this particular date range.
Differentiate the past time appointments
Differentiate the appearance of appointments based on specific criteria, such as displaying past hour appointments with different colors on the Scheduler, using the eventRendered event. This event triggers before an appointment renders on the Scheduler.
Appointments occupying entire cell
The Scheduler allows appointments to occupy the full height of the cell without its header part by setting true for the enableMaxHeight property.
When multiple appointments are available in the same cell, an indicator can be displayed by setting true to the enableIndicator property. Its default value is false.
Display tooltip for appointments
Tooltips provide additional information about appointments in a formatted style. Here’s how to work with tooltips:
Show or hide built-in tooltip
Display tooltips for appointments by setting true to the enableTooltip option within the eventSettings property.
Customize tooltip content using templates
Customize the content and appearance of tooltips using templates. To implement this:
- Enable the default tooltip.
- Use the
tooltipTemplateoption within theeventSettingsproperty to define a custom template.
The following example demonstrates tooltip customization:
Note: All field names mapped from the Scheduler dataSource can be accessed within the template, including
subject,description,location,startTime, andendTime.
Prevent tooltips for specific appointments
Selectively control when tooltips appear based on appointment data or other custom conditions using the tooltipOpen event.
To prevent a tooltip from appearing for certain events, set the cancel property to true within the tooltipOpen event. This ensures that tooltips are only displayed for the relevant appointments, improving user experience by minimizing unnecessary distractions.
Appointment filtering
Filter appointments based on specific criteria using the query option in eventSettings.
The following example demonstrates filtering to render only selected appointments:
Appointment selection
Select appointments using mouse or keyboard actions. Selected appointments are visually distinguished with a box shadow effect.
| Action | Description |
|---|---|
| Mouse click or Single tap on appointments | Selects a single appointment. |
| Ctrl + [Mouse click] or Ctrl + [Single tap] on appointments | Selects multiple appointments. |
Deleting multiple appointments
After selecting multiple appointments, you can delete them all at once by pressing the delete key.
Note: When deleting multiple selected occurrences of a recurring event series, only the selected occurrences will be deleted, not the entire series.
Retrieve appointment details from UI elements
Access information about an appointment’s fields directly from its UI element using the public method getEventDetails. Pass the appointment element as an argument to this method.
The following example displays the subject of a clicked appointment:
Get current view appointments
To retrieve the appointments visible in the current Scheduler view using the getCurrentViewEvents public method. In the following example, the count of current view appointment collection rendered has been traced in dataBound event.
Get all appointments
To access all appointments rendered on the Scheduler, regardless of the current view, use the getEvents public method. In the following example, the count of entire appointment collection rendered on the Scheduler has been traced in dataBound event.
Refresh appointments
Update only the appointments without refreshing the entire Scheduler using the refreshEvents public method.
scheduleObj.refreshEvents();This method is useful when changes have been made to the appointment data and those changes need to be reflected in the UI without a full Scheduler refresh.
You can refer to our JavaScript Scheduler feature tour page for its groundbreaking feature representations. You can also explore our JavaScript Scheduler example to knows how to present and manipulate data.