Параметр field в библиотеке Pikaday определяет
DOM-элемент, с которым будет связан экземпляр календаря. Это ключевая
точка интеграции виджета выбора даты с интерфейсом приложения, поскольку
именно через field происходит привязка к input-элементу и
управление его значением.
field указывает, к какому HTML-элементу должен быть
прикреплён календарь. В большинстве случаев это
<input type="text">, в который пользователь вводит
или получает выбранную дату.
Основные функции параметра:
Без корректно заданного field календарь может быть
создан, но не будет связан с интерфейсом, что делает его фактически
изолированным компонентом.
Параметр field принимает DOM-элемент.
Чаще всего используется один из следующих вариантов:
field: document.getElementById('datepicker')
или
field: document.querySelector('.date-input')
Также допустим прямой захват элемента из формы:
const input = document.querySelector('input[name="date"]');
const picker = new Pikaday({
field: input
});
При передаче элемента в field, календарь
автоматически:
focus,
click)Пример стандартной привязки:
<input id="birthday" type="text">
new Pikaday({
field: document.getElementById('birthday')
});
После инициализации:
Если пользователь вручную изменяет значение поля, календарь пытается
интерпретировать строку как дату. Это поведение зависит от настроек
format и parse.
При корректной конфигурации:
Datenew Pikaday({
field: document.getElementById('date'),
format: 'DD.MM.YYYY'
});
В этом случае ввод 25.12.2026 будет корректно
распознан.
Параметр field участвует в нескольких стадиях жизненного
цикла календаря:
Инициализация События привязываются к DOM-элементу.
Синхронизация начального значения Если input
содержит дату, она преобразуется в Date и устанавливается
как текущая.
Обновление состояния Любое изменение выбора даты
отражается в field.value.
Разрушение экземпляра При вызове
destroy() все обработчики, связанные с field,
удаляются.
Если field не указан, календарь не привязывается к input
и становится автономным компонентом. В таком режиме:
onSelectПример:
const picker = new Pikaday({
onSelect: function(date) {
console.log(date);
}
});
Такой режим используется редко и применяется в кастомных интерфейсах, где значение даты хранится отдельно от DOM.
При использовании динамически создаваемых input-элементов важно передавать актуальный DOM-узел. Передача несуществующего элемента приводит к отсутствию привязки.
Пример корректной инициализации после рендера:
setTimeout(() => {
const input = document.querySelector('#dynamic-date');
new Pikaday({
field: input
});
}, 0);
При SPA-подходах поле часто создаётся после загрузки компонента, поэтому инициализация календаря должна происходить синхронно с появлением DOM.
Хотя field чаще всего используется с
<input>, технически возможно привязать календарь к
любому элементу, поддерживающему DOM-события. Однако в этом случае:
onSelectПример кастомной привязки:
const display = document.getElementById('date-display');
new Pikaday({
field: display,
onSelect: function(date) {
display.textContent = this.getMoment(date).format('DD.MM.YYYY');
}
});
field тесно связан с рядом других настроек:
format — определяет формат записи в inputdefaultDate — влияет на начальное отображениеsetDefaultDate — управляет синхронизацией при
инициализацииbound — определяет поведение отображения календаря
относительно fieldВ частности, связка field + format формирует основное
поведение пользовательского ввода.
Часто встречаются следующие проблемы:
null или несуществующего элементаNodeList вместо
одного элементаПример ошибки:
new Pikaday({
field: document.querySelectorAll('.date') // неверно
});
Корректный вариант:
new Pikaday({
field: document.querySelector('.date')
});