Метод toggle() предназначен для переключения состояния
календаря: если календарь закрыт — он открывается, если открыт —
закрывается. Это один из базовых методов программного управления
экземпляром Flatpickr, который позволяет синхронизировать поведение
календаря с внешними событиями интерфейса.
Внутри библиотеки метод работает как логический переключатель над
состоянием isOpen, изменяя его на противоположное и вызывая
соответствующую внутреннюю логику открытия или закрытия.
instance.toggle();
Где instance — экземпляр Flatpickr, созданный через:
const instance = flatpickr("#input", {});
Метод toggle() выполняет одну из двух операций в
зависимости от текущего состояния экземпляра:
Если календарь закрыт:
open()Если календарь открыт:
close()isOpenФактически toggle() является обёрткой над двумя
ключевыми методами: open() и close().
В основе работы метода лежит проверка внутреннего флага:
if (instance.isOpen) {
instance.close();
} else {
instance.open();
}
Однако реальная реализация в Flatpickr учитывает дополнительные факторы:
altInputinline-режимаdisable, minDate,
maxDate)onOpen и
onCloseopen() и close()Метод toggle() не является самостоятельной логикой
отображения, а лишь диспетчером состояния.
open()Принудительно открывает календарь независимо от текущего состояния.
close()Принудительно закрывает календарь.
toggle()Определяет текущее состояние и выбирает одно из двух действий.
Ключевое отличие заключается в том, что toggle() всегда
зависит от текущего UI-состояния, а не от внешней логики.
const fp = flatpickr("#date", {});
document.querySelector("#btn").addEventListener("click", () => {
fp.toggle();
});
Кнопка выступает внешним триггером управления календарём.
const fp = flatpickr("#date", {});
const icon = document.querySelector(".calendar-icon");
icon.addEventListener("click", () => {
fp.toggle();
});
Часто используется для иконок календаря внутри кастомных input-компонентов.
if (!fp.isOpen) {
fp.toggle();
}
Хотя избыточно, подобный подход применяется при интеграции с анимационными слоями интерфейса.
Повторный вызов toggle() может приводить к частым
переключениям состояния, особенно при:
Для предотвращения дребезга иногда используется проверка:
if (!fp.isOpen) {
fp.toggle();
}
или наоборот:
if (fp.isOpen) {
fp.toggle();
}
Метод toggle() вызывает те же события, что и
open() и close():
onOpenonCloseonChange (косвенно, при выборе даты)Порядок вызовов важен:
open() или close()В режиме:
flatpickr("#calendar", {
inline: true
});
метод toggle() фактически теряет смысл, так как
календарь всегда отображается в DOM.
В этом случае:
open() и close() не изменяют
видимостьtoggle() может не выполнять визуальных измененийЕсли input отключён:
input.disabled = true;
метод toggle() может:
Это зависит от конфигурации и версии Flatpickr.
function toggleCalendar(fpInstance, state) {
if (state === "invert") {
fpInstance.toggle();
}
}
document.addEventListener("keydown", (e) => {
if (e.key === "F2") {
fp.toggle();
}
});
В реактивных системах метод используется как мост между состоянием UI и календарём:
watch(isCalendarVisible, (value) => {
if (value) {
fp.toggle();
}
});
button.addEventListener("click", () => {
fp.toggle();
fp.toggle();
});
Результат — мгновенное открытие и закрытие.
Если внешний state не отражает isOpen,
toggle() может приводить к рассинхронизации интерфейса.
fp.destroy();
fp.toggle(); // ошибка или no-op
После destroy() метод становится недоступным.
Метод toggle() считается лёгкой операцией, однако его
частое использование может:
Поэтому в сложных интерфейсах иногда предпочтительнее явное
управление через open() и close().
Внутри экземпляра Flatpickr метод toggle() является
частью публичного API управления состоянием UI-компонента. Он служит
связующим звеном между:
и обеспечивает минимальную точку входа для переключения поведения без необходимости анализировать текущее состояние вручную.