Событие autoNumeric:initialized срабатывает в момент
завершения инициализации экземпляра AutoNumeric и фиксирует состояние,
при котором поле ввода уже полностью преобразовано библиотекой, все
правила форматирования применены, а объект управления значением готов к
работе. Это событие относится к жизненному циклу экземпляра и является
ключевой точкой для подключения логики, зависящей от корректно
настроенного форматированного ввода.
Инициализация AutoNumeric включает несколько последовательных этапов:
парсинг начального значения элемента, применение конфигурации
форматирования, установка внутренних слушателей и привязка API к
DOM-элементу. Только после завершения всех этих шагов генерируется
событие autoNumeric:initialized.
Событие диспатчится непосредственно на DOM-элементе, к которому был
применён AutoNumeric, что позволяет использовать стандартные механизмы
addEventListener без необходимости доступа к внутренним
структурам экземпляра.
Ключевая особенность заключается в том, что событие гарантированно происходит один раз на каждый успешный цикл инициализации, если экземпляр не уничтожается и не пересоздаётся.
Базовая регистрация обработчика выполняется через стандартный API событий DOM:
const input = document.querySelector('#amount');
input.addEventListener('autoNumeric:initialized', (event) => {
console.log('AutoNumeric инициализирован');
});
В момент вызова обработчика поле уже находится под управлением AutoNumeric, а любые операции форматирования доступны через связанный экземпляр.
Событие autoNumeric:initialized передаёт расширенный
объект event, содержащий полезные данные о созданном
экземпляре.
Основные поля event.detail:
Пример доступа к данным:
input.addEventListener('autoNumeric:initialized', (event) => {
const anElement = event.detail.autoNumericInstance;
console.log(anElement.getNumber());
console.log(event.detail.formattedValue);
});
Наличие ссылки на экземпляр позволяет сразу выполнять операции
set, get, clear, не дожидаясь
дополнительных проверок готовности.
Событие возникает строго после завершения всех внутренних шагов:
autoNumeric:initializedЭто делает событие надёжной точкой синхронизации для внешней логики, зависящей от корректного состояния поля.
Важно учитывать, что если элемент уже был инициализирован ранее и
происходит повторная инициализация после destroy, событие
будет вызвано повторно.
Наиболее частый сценарий — сохранение ссылки на экземпляр для дальнейшей работы без повторного поиска через DOM:
let amountAN;
input.addEventListener('autoNumeric:initialized', (event) => {
amountAN = event.detail.autoNumericInstance;
});
function updateValue(value) {
amountAN.set(value);
}
Такой подход исключает необходимость повторного обращения к
AutoNumeric.getAutoNumericElement(...) и ускоряет работу в
сложных формах.
При массовой инициализации полей событие срабатывает независимо для каждого элемента:
document.querySelectorAll('.price').forEach((el) => {
el.addEventListener('autoNumeric:initialized', (event) => {
console.log('Инициализировано поле:', event.detail.domElement);
});
});
Порядок вызова событий соответствует порядку инициализации экземпляров, который обычно совпадает с порядком обхода DOM, но не гарантируется при асинхронных сценариях.
Так как событие всплывает по DOM-дереву, возможно использование делегирования:
document.addEventListener('autoNumeric:initialized', (event) => {
if (event.target.matches('.price')) {
console.log('Готово поле цены');
}
});
Этот подход удобен при динамически добавляемых элементах, когда нет необходимости вручную навешивать обработчики на каждый новый input.
При вызове destroy() экземпляр удаляется, а при
повторной инициализации событие autoNumeric:initialized
будет сгенерировано снова:
const an = AutoNumeric.getAutoNumericElement(input);
an.destroy();
AutoNumeric.set(input, 1234);
После повторного set формируется новый экземпляр, и
событие снова становится доступным для прослушивания. Это важно
учитывать при SPA-архитектурах, где элементы могут пересоздаваться без
перезагрузки страницы.
Часто необходимо синхронизировать другие элементы интерфейса с уже готовым форматированным полем:
input.addEventListener('autoNumeric:initialized', (event) => {
const an = event.detail.autoNumericInstance;
document.querySelector('#display').textContent = an.getFormatted();
});
Некоторые формы требуют проверки значения только после полной инициализации:
input.addEventListener('autoNumeric:initialized', (event) => {
const value = event.detail.autoNumericInstance.getNumber();
if (value < 0) {
console.warn('Значение ниже допустимого диапазона');
}
});
Событие удобно для отладки сложных форм с множеством числовых полей:
document.addEventListener('autoNumeric:initialized', (event) => {
console.log('Поле готово:', {
element: event.detail.domElement,
value: event.detail.rawValue
});
});
При работе с динамически добавляемыми элементами важно учитывать, что
событие будет срабатывать только после повторной инициализации
AutoNumeric на новом узле. Простое добавление input в DOM
не вызывает событие автоматически.
Пример корректного сценария:
const newInput = document.createElement('input');
document.body.appendChild(newInput);
AutoNumeric.set(newInput, 1000);
newInput.addEventListener('autoNumeric:initialized', (event) => {
console.log('Динамическое поле готово');
});
Порядок здесь критичен: обработчик должен быть установлен до или сразу после инициализации, иначе событие может быть пропущено.
destroy может приводить к
дублированию логикиПри использовании AutoNumeric совместно с React, Vue или Angular событие может использоваться как точка синхронизации между DOM и состоянием приложения:
input.addEventListener('autoNumeric:initialized', (event) => {
const value = event.detail.autoNumericInstance.getNumber();
store.setState({ amount: value });
});
Такой подход позволяет избежать гонок состояния, когда React-рендер происходит до завершения форматирования.
Если инициализация не может быть завершена из-за некорректных
настроек (например, конфликтующих параметров форматирования), событие
autoNumeric:initialized не будет вызвано. Это делает его
индикатором успешной готовности экземпляра.
В таких случаях обычно требуется обработка ошибок на уровне инициализации, а не через события DOM.