Событие onOpen в Flatpickr срабатывает в момент открытия
календаря, когда пользовательский интерфейс календаря уже был
инициирован и становится видимым. Оно относится к группе событий
жизненного цикла экземпляра календаря и используется для выполнения
логики непосредственно перед или сразу после отображения панели выбора
даты.
Поведение календаря Flatpickr строится вокруг нескольких ключевых событий:
onReady)onOpen)onChange)onClose)onValueUpdate и внутренние
механизмы)onOpen занимает промежуточное положение между
готовностью экземпляра и взаимодействием пользователя с интерфейсом.
Важно, что к моменту вызова событие уже происходит после того, как
DOM-структура календаря создана и добавлена в документ.
onOpenОбработчик события получает стандартный набор аргументов Flatpickr:
onOpen: function(selectedDates, dateStr, instance) {
// логика
}
selectedDates Массив объектов Date,
содержащий текущие выбранные значения. В режиме без выбора массив
пуст.
dateStr Строковое представление выбранной даты в
формате, заданном в конфигурации dateFormat.
instance Ссылка на текущий экземпляр Flatpickr. Через него доступно полное API управления календарём.
onOpenflatpickr("#calendar", {
onOpen: function(selectedDates, dateStr, instance) {
console.log("Календарь открыт");
}
});
В момент срабатывания событие фиксирует факт открытия, позволяя синхронизировать интерфейс с состоянием календаря.
instanceОбъект instance предоставляет доступ к внутреннему
состоянию и методам управления:
instance.calendarContainer — DOM-узел календаряinstance.input — связанное поле вводаinstance.selectedDates — массив выбранных датinstance.setDate() — программная установка датыinstance.close() — закрытие календаряПример модификации интерфейса при открытии:
flatpickr("#calendar", {
onOpen: function(selectedDates, dateStr, instance) {
instance.calendarContainer.classList.add("calendar-opened");
}
});
Добавление класса позволяет изменять стили календаря только в активном состоянии.
onOpen для динамической логикиСобытие часто применяется для подготовки данных или интерфейса перед взаимодействием с календарём.
flatpickr("#calendar", {
onOpen: function(selectedDates, dateStr, instance) {
fetch("/api/unavailable-dates")
.then(res => res.json())
.then(data => {
instance.set("disable", data);
});
}
});
В этом сценарии данные загружаются лениво, только в момент открытия календаря.
При открытии отображается один выбранный день или пустое состояние.
onOpen вызывается независимо от наличия значения.
multipleПри множественном выборе selectedDates содержит массив
всех выбранных дат. В onOpen можно использовать его для
визуальной синхронизации.
onOpen: function(selectedDates, dateStr, instance) {
selectedDates.forEach(date => {
console.log(date.toISOString());
});
}
rangeВ режиме диапазона selectedDates содержит до двух
значений: начало и конец диапазона. При открытии часто используется для
восстановления визуального состояния диапазона.
onOpen от
onReadyonReady вызывается один раз при инициализации
экземпляра, тогда как onOpen может вызываться многократно
при каждом открытии календаря.
| Событие | Когда вызывается | Повторяемость |
|---|---|---|
| onReady | после инициализации | один раз |
| onOpen | при каждом открытии календаря | многократно |
onOpen не гарантирует первичную готовность DOM, но
гарантирует факт отображения интерфейса.
onClose и onChangeonOpen часто используется совместно с закрытием и
изменением данных.
flatpickr("#calendar", {
onOpen: function(_, __, instance) {
console.log("open");
},
onClose: function(_, __, instance) {
console.log("close");
},
onChange: function(selectedDates, dateStr, instance) {
console.log("change", dateStr);
}
});
Такой набор позволяет отслеживать полный цикл взаимодействия пользователя с календарём.
На мобильных устройствах Flatpickr может переключаться на нативные
элементы ввода в зависимости от конфигурации. В таком случае поведение
onOpen зависит от параметра disableMobile.
disableMobile: true календарь рендерится всегда, и
onOpen вызывается стандартноdisableMobile: false может использоваться нативный
date picker, и вызов события становится зависимым от реализации
браузераonOpenМетод instance.open() инициирует открытие календаря и
вызывает onOpen:
const fp = flatpickr("#calendar", {
onOpen: function(_, __, instance) {
console.log("opened programmatically or by user");
}
});
fp.open();
Событие не различает источник открытия: пользовательское взаимодействие или программный вызов.
onOpenВнутри обработчика допустима модификация состояния, однако важно учитывать, что повторная установка значений может привести к повторным рендерам календаря.
Пример блокировки дат при каждом открытии:
flatpickr("#calendar", {
onOpen: function(_, __, instance) {
instance.set("minDate", new Date());
}
});
onOpenК моменту вызова календарь уже присутствует в DOM, поэтому доступны прямые DOM-манипуляции:
onOpen: function(_, __, instance) {
const calendar = instance.calendarContainer;
const footer = document.createElement("div");
footer.textContent = "Выбор даты активен";
calendar.appendChild(footer);
}
Такие изменения сохраняются до закрытия календаря, если не пересоздаётся экземпляр.
onOpenПри использовании сложных конфигураций Flatpickr, включая
plugins, rangePlugin, confirmDate
и другие расширения, onOpen часто служит точкой
инициализации дополнительных элементов интерфейса, связанных с
календарём.
В таких случаях важно учитывать, что DOM может модифицироваться плагинами после базового открытия, поэтому порядок выполнения логики может зависеть от их внутренней реализации.