В библиотеке Flatpickr событие onReady является одним из
ключевых хуков жизненного цикла календаря и срабатывает в момент полной
инициализации экземпляра. К этому моменту уже создан DOM-компонент
календаря, применены все конфигурационные параметры, обработаны
начальные значения и завершена первичная отрисовка интерфейса.
onReady выполняется один раз на каждый экземпляр и
служит точкой, где календарь гарантированно находится в стабильном
состоянии: структура DOM существует, внутренние вычисления завершены,
события навешены, а начальные даты уже интерпретированы библиотекой.
Инициализация Flatpickr проходит несколько этапов:
onReadyТаким образом, onReady располагается строго после всех
внутренних операций и перед первым пользовательским взаимодействием.
Важно, что к моменту вызова:
inline: true)minDate,
maxDate)single, multiple,
rangeСобытие onReady принимает стандартный набор аргументов,
идентичный другим хукам Flatpickr:
onReady: function(selectedDates, dateStr, instance) {
// логика
}
Массив объектов Date, содержащий уже выбранные даты на
момент инициализации.
single — массив из одного элемента или
пустойmultiple — набор выбранных датrange — две даты (начало и конец
диапазона)Строковое представление выбранной даты в формате, заданном через
dateFormat.
Пример:
"2026-05-31"
Ссылка на текущий экземпляр Flatpickr. Через него доступна вся внутренняя API:
instance.calendarContainerinstance.inputinstance.configinstance.jumpToDate()instance.open() / close()Событие используется для задач, которые требуют гарантированного наличия DOM и полностью инициализированного состояния календаря.
Flatpickr генерирует разметку динамически, поэтому любые
DOM-манипуляции до инициализации будут бесполезны. onReady
позволяет безопасно изменять структуру:
flatpickr("#date", {
onReady: function(selectedDates, dateStr, instance) {
const calendar = instance.calendarContainer;
const footer = document.createElement("div");
footer.className = "fp-footer";
footer.textContent = "Выбор даты активен";
calendar.appendChild(footer);
}
});
На этапе onReady можно изменять поведение календаря, не
опасаясь перезаписи внутренними процессами Flatpickr:
onReady: function(_, __, instance) {
instance.set("weekNumbers", true);
instance.set("altInputClass", "custom-input");
}
Хотя часть конфигурации лучше задавать до инициализации,
onReady полезен для динамических условий, зависящих от
окружения.
Частый сценарий — синхронизация состояния календаря с внешними
компонентами интерфейса. Поскольку onReady гарантирует
завершение инициализации, он используется как точка старта
взаимодействия:
onReady: function(selectedDates, dateStr, instance) {
document.querySelector("#status").textContent = "Календарь готов";
if (selectedDates.length === 0) {
document.querySelector("#hint").style.display = "block";
}
}
onReady часто путают с другими событиями, однако их
назначение принципиально различается.
Несмотря на синхронную природу вызова, onReady часто
используется как триггер для запуска асинхронных процессов, связанных с
календарём.
Например, загрузка ограничений дат с сервера:
onReady: function(_, __, instance) {
fetch("/api/unavailable-dates")
.then(res => res.json())
.then(data => {
instance.set("disable", data);
});
}
В этом случае календарь уже отрисован, но его поведение может быть изменено после получения данных.
При множественном выборе onReady позволяет обработать
уже существующие значения:
onReady: function(selectedDates, dateStr, instance) {
selectedDates.forEach(date => {
console.log("Выбрана дата:", date);
});
}
В режиме диапазона onReady особенно полезен для
валидации уже установленного диапазона:
onReady: function(selectedDates, dateStr, instance) {
if (selectedDates.length === 2) {
const [start, end] = selectedDates;
if (start > end) {
instance.clear();
}
}
}
Ключевое преимущество onReady — полный доступ к DOM
после генерации интерфейса.
Основные узлы:
instance.calendarContainer — основной контейнер
календаряinstance.daysContainer — сетка днейinstance.monthNav — навигация по месяцамinstance.currentMonthElement — текущий месяцinstance.currentYearElement — текущий годПример модификации навигации:
onReady: function(_, __, instance) {
const nav = instance.monthNav;
nav.classList.add("custom-nav");
}
Некоторые параметры конфигурации напрямую влияют на состояние,
доступное в onReady:
defaultDate — определяет initial selectedDatesinline — влияет на момент и способ рендерингаmode — изменяет структуру выбранных датenableTime — добавляет временные элементы в DOMПример:
flatpickr("#date", {
defaultDate: "2026-05-31",
enableTime: true,
onReady: function(selectedDates, dateStr, instance) {
console.log(selectedDates); // уже содержит дату
}
});
Несмотря на широкие возможности, onReady имеет ряд
ограничений:
Часто встречающиеся проблемы:
1. Попытка доступа к DOM до готовности
const calendar = document.querySelector(".flatpickr-calendar");
// может быть null
Решение — использовать onReady.
2. Дублирование логики с onOpen
Перенос тяжёлых операций в onOpen вместо
onReady приводит к лишним вычислениям при каждом
открытии.
3. Изменение конфигурации до инициализации
Некоторые разработчики пытаются использовать onReady
вместо правильной предустановки параметров, хотя часть конфигурации
должна быть задана заранее.
В производственных интерфейсах onReady часто выступает
как точка синхронизации:
Его роль заключается не в обработке пользовательских событий, а в фиксации момента, когда календарь становится полностью функциональным и доступным для безопасного расширения.