Параметр clickOpens в библиотеке Flatpickr управляет
тем, открывается ли календарь при клике на поле ввода. Это один из
базовых флагов поведения инстанса, определяющий интерактивность
компонента без изменения его программного API.
Тип значения: Boolean По умолчанию:
true
Ключевая задача параметра — разделить сценарии, где открытие календаря должно происходить автоматически при взаимодействии пользователя с полем, и сценарии, где управление открытием берётся полностью под контроль логики приложения.
При значении clickOpens: true любое взаимодействие с
input-полем, которое считается кликом (или тапом на мобильных
устройствах), инициирует вызов метода открытия календаря.
Это включает:
Внутри Flatpickr это эквивалентно вызову внутреннего метода
open() при наступлении события
mousedown/click (в зависимости от конфигурации
и режима сборки событий).
При clickOpens: false поведение полностью меняется:
календарь перестаёт реагировать на клики по полю ввода.
flatpickr("#dateInput", {
clickOpens: false
});
В этом режиме:
instance.open().Отключение используется в случаях, когда требуется более сложная логика управления UI.
Распространённый сценарий — наличие отдельной кнопки:
const fp = flatpickr("#dateInput", {
clickOpens: false
});
document.querySelector("#btnOpen").addEventListener("click", () => {
fp.open();
});
В этом случае input становится только полем отображения значения, а управление UI переносится на внешний элемент.
В интерфейсах, где ввод должен быть строго контролируемым,
clickOpens: false исключает случайное открытие
календаря.
Особенно актуально при:
Когда дата определяется бизнес-логикой:
if (user.hasPermission) {
fp.open();
}
В таких случаях пользователь не должен напрямую инициировать открытие календаря.
Параметр allowInput определяет, можно ли вводить текст
вручную.
allowInput: true — пользователь может вводить дату
рукамиclickOpens: false — календарь не открывается по
кликуКомбинация:
flatpickr("#dateInput", {
clickOpens: false,
allowInput: true
});
Даёт поведение текстового поля с ручным вводом и без всплывающего календаря.
При использовании wrap: true поведение клика зависит от
того, на какой элемент происходит событие.
HTML:
<div class="flatpickr">
<input type="text" data-input>
<button data-open>Открыть</button>
</div>
flatpickr(".flatpickr", {
wrap: true,
clickOpens: false
});
В этом случае:
data-open всё ещё может открывать
календарь (если обработка настроена через Flatpickr wrapper).В режиме inline: true календарь всегда отображается в
DOM постоянно, поэтому параметр clickOpens фактически
теряет смысл.
flatpickr("#calendar", {
inline: true,
clickOpens: false
});
Здесь:
Параметр static: true влияет только на позиционирование
календаря (он не переносится в body).
clickOpens при этом продолжает работать как обычно:
flatpickr("#dateInput", {
static: true,
clickOpens: true
});
Открытие происходит по клику, но календарь остаётся внутри контейнера.
Flatpickr привязывает обработчики событий к элементу input при инициализации экземпляра. Логика примерно следующая:
clickOpens === true → добавляется обработчик
open() на клик;clickOpens === false → обработчик открытия не
регистрируется.Важно, что отключение параметра не блокирует метод
open() как таковой — он остаётся доступным через API.
Частая ошибка — смешивание ролей параметров.
Отвечает только за открытие календаря по клику.
Отвечает за возможность ручного ввода текста.
Полностью блокирует ввод в поле, но не всегда блокирует программное открытие календаря.
Пример конфликтов:
flatpickr("#dateInput", {
clickOpens: true,
allowInput: false
});
Результат:
clickOpens не управляет открытием при фокусе, если он
инициирован программно или через Tab-навигацию.
clickOpensТаким образом, параметр строго ограничен именно событийной моделью клика, а не фокусом как таковым.
В формах с централизованным состоянием clickOpens: false
часто используется как способ перевести компонент в
controlled-режим:
Когда Flatpickr встроен в нестандартный UI, клик по input может конфликтовать с визуальной логикой:
Отключение clickOpens устраняет лишние триггеры
открытия.
Если параметр изменяется после инициализации, поведение не всегда обновляется автоматически:
fp.set("clickOpens", false);
В зависимости от версии Flatpickr:
destroy() и повторная
инициализация.Это связано с тем, что событие открытия регистрируется на этапе создания экземпляра.
clickOpens: false
Ожидание: календарь нельзя открыть вообще Реальность:
fp.open() продолжает работать
clickOpens не влияет на ввод текста и не предназначен
для этого.
Если вручную навешивается:
input.addEventListener("click", () => fp.open());
то clickOpens: false не имеет значения, так как логика
переопределена на уровне DOM.
clickOpens является не просто UI-настройкой, а точкой
разделения ответственности:
Это делает параметр важным элементом интеграции календаря в сложные интерфейсы, где требуется строгий контроль над событиями пользовательского ввода.