Инициализация Flatpickr в программном режиме основана на прямом
вызове фабричной функции flatpickr(), которая создаёт
экземпляр календаря и связывает его с указанным DOM-элементом или
набором элементов. Такой подход отличается от декларативного
использования через атрибуты и позволяет полностью контролировать момент
создания, конфигурацию и жизненный цикл компонента.
Основная форма инициализации реализуется через функцию:
flatpickr(target, options);
Где:
target — DOM-элемент, CSS-селектор или массив
элементовoptions — объект конфигурацииПростейший вариант привязки к input-элементу:
const input = document.querySelector("#dateInput");
flatpickr(input, {
dateFormat: "Y-m-d"
});
В этом случае Flatpickr создаёт календарь и привязывает его к конкретному полю ввода без необходимости использования дополнительных атрибутов в HTML.
В качестве цели может быть передана строка-селектор. Библиотека самостоятельно выполнит поиск элементов в DOM:
flatpickr("#dateInput", {
enableTime: true,
dateFormat: "Y-m-d H:i"
});
При таком подходе происходит автоматическое применение календаря ко всем элементам, соответствующим селектору. Если селектор возвращает несколько узлов, каждый из них получает отдельный экземпляр Flatpickr.
Flatpickr поддерживает массовую инициализацию без необходимости ручного перебора:
flatpickr(".date-field", {
weekNumbers: true
});
Каждый элемент с классом .date-field получает
собственный независимый экземпляр. Внутренне библиотека итерирует
NodeList и создаёт отдельные инстансы с изолированным состоянием.
Flatpickr может быть применён к элементу, созданному динамически во время выполнения скрипта. Это особенно важно при работе с интерфейсами, где DOM формируется на лету.
const input = document.createElement("input");
input.type = "text";
document.body.appendChild(input);
flatpickr(input, {
defaultDate: "today"
});
В данном сценарии критичным является момент добавления элемента в DOM. Инициализация должна происходить после вставки, иначе возможны проблемы с вычислением позиционирования календаря.
Функция flatpickr() возвращает объект-инстанс,
предоставляющий API для управления календарём:
const fp = flatpickr("#dateInput", {
enableTime: true
});
Экземпляр содержит методы и свойства, позволяющие управлять поведением компонента без повторной инициализации.
Основные возможности экземпляра:
Пример управления состоянием:
fp.open();
fp.setDate("2026-01-01");
fp.close();
Программный подход позволяет откладывать создание календаря до момента, когда он действительно необходим. Это важно для оптимизации производительности в больших интерфейсах.
let fpInstance = null;
function initDatepicker() {
if (!fpInstance) {
fpInstance = flatpickr("#dateInput", {
dateFormat: "d.m.Y"
});
}
}
Такой паттерн предотвращает повторное создание экземпляра и снижает нагрузку на DOM при условной отрисовке компонентов.
Flatpickr может подключаться в зависимости от состояния приложения или данных:
if (document.querySelector("#dateInput")) {
flatpickr("#dateInput", {
minDate: "today"
});
}
Это предотвращает ошибки в случае отсутствия целевого элемента и делает код устойчивым к изменению DOM-структуры.
При необходимости изменения конфигурации часто применяется стратегия уничтожения и повторного создания экземпляра.
let fp = flatpickr("#dateInput", {
enableTime: true
});
// изменение настроек
fp.destroy();
fp = flatpickr("#dateInput", {
enableTime: false,
dateFormat: "Y-m-d"
});
Метод destroy() полностью удаляет обработчики событий и
очищает связанное состояние, после чего возможна безопасная повторная
инициализация.
Flatpickr не изменяет структуру элемента, а добавляет собственный слой управления поверх него. Поэтому важно учитывать, что элемент должен быть доступен и корректно отрендерен.
window.addEventListener("DOMContentLoaded", () => {
flatpickr("#dateInput", {
allowInput: true
});
});
Инициализация после загрузки DOM гарантирует корректную работу измерений, позиционирования и обработчиков событий.
Конфигурация может формироваться динамически, что особенно полезно при работе с формами и серверными данными:
function getConfig(type) {
return {
enableTime: type === "datetime",
dateFormat: type === "datetime" ? "Y-m-d H:i" : "Y-m-d"
};
}
flatpickr("#dateInput", getConfig("datetime"));
Такой подход позволяет централизовать логику настройки и снижает дублирование кода.
При инициализации нескольких элементов важно учитывать, что каждый вызов создаёт отдельный экземпляр:
const instances = flatpickr(".date-field", {
dateFormat: "Y-m-d"
});
Результатом может быть массив или коллекция инстансов (в зависимости от версии), что позволяет управлять всеми календарями централизованно.
Программная модель позволяет запускать инициализацию по пользовательским событиям:
document.querySelector("#openCalendarBtn")
.addEventListener("click", () => {
flatpickr("#dateInput", {
defaultDate: "today"
});
});
Такой механизм применяется в интерфейсах с ленивой загрузкой компонентов или модальными окнами.
Flatpickr не требует повторной инициализации для обновления поведения. Однако при архитектурных изменениях может потребоваться хранение ссылки на экземпляр в глобальном состоянии модуля или компонента.
const calendar = {
instance: null,
init() {
this.instance = flatpickr("#dateInput", {
weekNumbers: true
});
}
};
Это обеспечивает централизованное управление жизненным циклом календаря и упрощает интеграцию в сложные интерфейсы.