Параметр allowInput в библиотеке Flatpickr управляет
тем, может ли пользователь вручную вводить дату в текстовое поле,
связанное с календарём. По умолчанию поле ввода блокируется от
неконтролируемого ручного редактирования, чтобы гарантировать
согласованность формата и корректную работу парсинга дат. Включение
allowInput меняет эту модель взаимодействия, добавляя
возможность прямого ввода значений пользователем.
Когда allowInput установлен в true, поле
становится обычным текстовым input с точки зрения взаимодействия:
пользователь может печатать, вставлять значения, изменять их без
открытия календаря. При этом сам Flatpickr продолжает отслеживать
изменения и пытаться интерпретировать введённую строку как дату в
соответствии с текущими настройками dateFormat.
При значении false (поведение по умолчанию) ввод через
клавиатуру частично или полностью блокируется, а изменение даты
происходит только через UI календаря или программные методы API.
При активированном allowInput ключевым становится этап
парсинга строки. Flatpickr не получает «готовую дату», а вынужден
преобразовывать текстовое значение в объект Date. Это
поведение тесно связано с параметром dateFormat.
Если формат строго задан, например:
dateFormat: "d.m.Y"
то вводимые данные должны соответствовать шаблону:
31.12.2026 — корректный вариант31/12/2026 — будет либо отклонён, либо интерпретирован
некорректно2026-12-31 — не совпадает с форматомПри несовпадении формата Flatpickr может:
Invalid Date внутри состоянияЭто поведение зависит от комбинации настроек strictDate,
parseDate и внутренней логики парсинга.
При включённом allowInput резко возрастает роль
валидации. Особенно важно взаимодействие с параметром
allowInvalidPreload и внутренней проверкой корректности
даты.
Если включён строгий режим парсинга (например, через пользовательскую функцию или жёсткий формат), ввод становится детерминированным: любое отклонение от формата приводит к сбросу значения.
В более мягком режиме Flatpickr пытается «угадать» дату, используя
встроенный парсер или локаль. Например, при локали с европейским
форматом дата 1-2-2026 может быть интерпретирована как 1
февраля или 2 января в зависимости от конфигурации.
Включение allowInput напрямую влияет на событийную
модель.
Основные события, которые начинают активно использоваться:
onChange — вызывается при каждом изменении
значенияonInput (внутреннее поведение через обработчики) —
фиксирует каждое редактирование строкиonClose — может срабатывать после потери фокуса, если
открыт календарьonValueUpdate — синхронизация состояния после успешного
парсингаПри ручном вводе последовательность событий становится менее предсказуемой, чем при выборе даты через UI. Это связано с тем, что каждое нажатие клавиши потенциально меняет состояние значения и инициирует попытку парсинга.
Режим с allowInput: true превращает календарный
компонент в гибридное поле:
Это создаёт две параллельные модели взаимодействия:
UI-ориентированная модель Пользователь выбирает дату через календарь, исключая ошибки формата.
Текстовая модель Пользователь вводит значение вручную, опираясь на знание формата.
Основная сложность заключается в рассинхронизации ожиданий. Flatpickr
должен постоянно синхронизировать строковое значение и внутренний объект
Date, что увеличивает вероятность промежуточных
неконсистентных состояний.
При allowInput: true ввод становится уязвимым к
ошибкам:
12.2026)12.12.2026abc)12|12|2026)31.02.2026)Flatpickr реагирует на такие случаи по-разному:
invalid состояниеОсобенно важно поведение при потере фокуса: именно в этот момент происходит финальная попытка интерпретации введённого значения.
allowInput тесно связан с отображаемым форматом.
При использовании:
dateFormat — формат хранения значенияaltInput — формат отображенияповедение усложняется. В случае активного altInput
пользователь может вводить данные в альтернативном поле, которое может
иметь другой формат. Это создаёт дополнительный слой преобразования:
input (user text)
→ altInput (display format)
→ internal Date object
→ dateFormat (output format)
Ошибки часто возникают именно на границе между altInput
и внутренним парсером.
При активном allowInput каждое изменение символа может
инициировать:
Это создаёт нагрузку на обработчики, особенно в случаях:
Оптимизация обычно достигается через ограничение частоты обработки событий или использование debounce в пользовательских надстройках.
На мобильных устройствах allowInput имеет особое
значение. Встроенные клавиатуры часто предлагают автоматическое
форматирование дат, что может конфликтовать с ожидаемым форматом
Flatpickr.
Типичные эффекты:
- на /)Flatpickr не контролирует поведение клавиатуры, поэтому ответственность за корректность ввода полностью ложится на механизм парсинга.
Даже при активном ручном вводе программные методы остаются приоритетными:
setDate()set()clear()Если значение устанавливается через API, Flatpickr обновляет поле независимо от текущего текста. Это может приводить к перезаписи пользовательского ввода, если изменение происходит во время редактирования.
Особенно важно учитывать момент фокуса: изменение значения во время активного ввода может вызвать визуальный конфликт между строкой и внутренним состоянием.
allowInput: true применяется в случаях, когда:
allowInput: false чаще используется там, где:
При работе с локалями поведение allowInput становится
зависимым от региональных форматов. Например:
DD.MM.YYYYMM/DD/YYYYYYYY-MM-DDFlatpickr использует локаль для отображения и частично для интерпретации, но ручной ввод всегда остаётся потенциально неоднозначным, если формат не жёстко задан.
Некорректная локализация приводит к типичным ошибкам интерпретации, особенно при числах меньше или равных 12, которые могут трактоваться как день или месяц.
Внутреннее состояние Flatpickr хранит:
При allowInput эти значения могут временно расходиться.
Основная задача библиотеки — привести их к единому состоянию после
завершения ввода.
Ключевой момент синхронизации происходит:
blurИменно в этих точках происходит окончательная нормализация значения.