Работа с Pikaday всегда начинается с привязки календаря к DOM-элементу ввода. Именно этот шаг определяет, как пользователь будет взаимодействовать с датой: через прямой ввод, через выбор из всплывающего календаря или в гибридном режиме.
Основной способ связать календарь с input-полем — передать элемент в
параметр field. Этот параметр принимает ссылку на
HTMLInputElement, который становится точкой управления датой.
const input = document.querySelector('#date-input');
const picker = new Pikaday({
field: input
});
После выполнения этого кода календарь автоматически «слушает» взаимодействие с полем ввода: клик по input открывает всплывающий календарь, а выбор даты заполняет значение поля.
Ключевой момент: field является обязательной
точкой привязки для стандартного поведения.
После выбора даты Pikaday автоматически записывает значение в input.
Формат по умолчанию — ISO-подобный (YYYY-MM-DD), но он
может быть изменён через toString или format
(в зависимости от конфигурации и расширений).
const picker = new Pikaday({
field: document.querySelector('#date-input'),
onSelect: function(date) {
console.log(date);
}
});
Важно понимать: input и календарь синхронизируются в одном направлении — выбор в календаре обновляет поле.
При привязке через field библиотека также отслеживает
изменения значения input, если формат соответствует ожидаемому.
const picker = new Pikaday({
field: document.querySelector('#date-input'),
format: 'YYYY-MM-DD'
});
Если пользователь вводит дату вручную, календарь пытается распознать её и установить внутреннее состояние.
Особенность поведения:
onSelect для управления inputХотя привязка происходит автоматически, часто требуется более точный контроль над тем, как именно значение записывается в input.
const input = document.querySelector('#date-input');
const picker = new Pikaday({
field: input,
onSelect: function(date) {
const formatted = this.toString(date);
input.value = formatted;
}
});
Здесь можно:
Если input уже содержит дату до инициализации календаря, Pikaday может использовать её как начальное значение при корректной настройке.
const input = document.querySelector('#date-input');
const picker = new Pikaday({
field: input,
defaultDate: new Date(input.value),
setDefaultDate: true
});
Параметры:
defaultDate — начальная дата календаряsetDefaultDate — установка этой даты в поле при
инициализацииЕсли поле пустое, календарь не устанавливает дату автоматически. В этом случае внутреннее состояние остается неопределённым до первого выбора.
const picker = new Pikaday({
field: document.querySelector('#date-input')
});
Поведение:
getFieldПосле инициализации можно получить доступ к привязанному input через API экземпляра.
const picker = new Pikaday({
field: document.querySelector('#date-input')
});
console.log(picker.getField());
Это полезно при динамической работе с формами, где input может изменяться или заменяться.
Прямая замена field после создания экземпляра не
предусмотрена как стандартный сценарий, поэтому используется
пересоздание календаря.
picker.destroy();
const newPicker = new Pikaday({
field: document.querySelector('#new-date-input')
});
Важно учитывать: каждый input должен иметь собственный экземпляр календаря.
Часто input делают readonly, чтобы запретить ручной ввод
и оставить только выбор через календарь.
<input id="date-input" readonly>
const picker = new Pikaday({
field: document.querySelector('#date-input')
});
Такой подход:
Pikaday по умолчанию реагирует на события focus/blur у input. При фокусе календарь открывается, при потере фокуса может закрываться (в зависимости от конфигурации и клика внутри календаря).
Это поведение важно учитывать при:
Каждый input требует отдельного экземпляра календаря:
document.querySelectorAll('.date-input').forEach(el => {
new Pikaday({
field: el
});
});
Общая логика:
Если input удаляется из DOM, календарь не уничтожается автоматически. Это может привести к утечкам памяти.
Корректный подход:
picker.destroy();
input.remove();
Метод destroy():
Привязка input к Pikaday строится вокруг нескольких ключевых принципов:
field задаёт основную точку взаимодействияdestroy() при
удалении DOMЭта модель делает интеграцию календаря предсказуемой и устойчивой даже в динамических интерфейсах.