Событие input в контексте библиотеки AutoNumeric играет
ключевую роль в синхронизации пользовательского ввода с форматированным
и «сырым» числовым представлением значения. Несмотря на то, что оно
основано на стандартном DOM-событии input, поведение в
AutoNumeric имеет существенные особенности, связанные с автоматическим
форматированием, локализацией чисел и внутренним управлением состоянием
инстанса.
В стандартном HTML-инпуте событие input возникает при
любом изменении значения поля: ввод символа, удаление, вставка,
автозаполнение. В AutoNumeric это событие сохраняется, но его семантика
расширяется:
input.Ключевой момент заключается в том, что значение, доступное через
event.target.value, уже содержит форматированное
представление числа, а не «сырой» ввод пользователя.
В обычном input:
input.value // "1234"
В AutoNumeric:
input.value // "1,234.00" (пример при соответствующей конфигурации)
Таким образом:
value.Для получения неформатированного значения используется API:
autoNumericInstance.getNumber(); // число
autoNumericInstance.getNumericString(); // строковое число
Событие input в AutoNumeric возникает после
завершения внутренней обработки ввода. Это критически важно для
понимания порядка операций:
input.Из-за этого обработчики input всегда получают уже
стабилизированное значение.
AutoNumeric не отменяет стандартный механизм подписки:
const input = document.querySelector('#price');
input.addEventListener('input', (event) => {
console.log(event.target.value);
});
Однако важно учитывать, что значение уже форматировано.
В большинстве случаев предпочтительнее использовать инстанс:
const anElement = AutoNumeric.getAutoNumericElement('#price');
anElement.node.addEventListener('input', () => {
console.log(anElement.getNumericString());
});
Такой подход позволяет:
AutoNumeric может изменять значение даже при минимальном вводе. Например:
1 → 1.001234 → 1,234.000.00 или пустое значение (в зависимости от
настроек)Это означает, что событие input может срабатывать даже в
случаях, когда пользователь визуально «не завершил» ввод числа.
Событие input тесно связано с конфигурацией
экземпляра:
Определяет количество знаков после запятой.
decimalPlaces: 2
Любой ввод приводит к автоматическому округлению, что отражается в
input.
Разделитель групп разрядов влияет на визуальное значение:
digitGroupSeparator: ','
При каждом input значение пересобирается.
Некоторые режимы AutoNumeric предполагают различие между UI-значением
и значением при отправке формы. Однако событие input всегда
связано именно с UI-слоем и не учитывает
submit-трансформации.
AutoNumeric предоставляет собственные события, и одно из ключевых —
autoNumeric:formatted.
Сравнение:
| Событие | Что означает | Формат значения |
|---|---|---|
| input | изменение поля | форматированное |
| autoNumeric:formatted | завершение форматирования | гарантированно стабилизированное |
| autoNumeric:rawValueModified | изменение сырого значения | числовое |
input находится между пользовательским вводом и
внутренними событиями библиотеки, поэтому часто используется как
«реактивный слой UI».
Важно учитывать, что вызовы API AutoNumeric могут не всегда
триггерить input.
anElement.set(1000);
В зависимости от конфигурации:
input;change, но не
input.Для гарантированной реакции на программные изменения рекомендуется использовать:
autoNumeric:formatted
input.addEventListener('input', () => {
const value = anElement.getNumber();
if (value > 10000) {
console.log('Превышение лимита');
}
});
Особенность: значение уже нормализовано, нет необходимости парсинга строки.
input.addEventListener('input', () => {
const price = anElement.getNumber();
const tax = price * 0.2;
document.querySelector('#tax').textContent = tax;
});
priceInput.addEventListener('input', () => {
const price = priceAN.getNumber();
const discount = price * 0.1;
discountAN.set(discount);
});
Важно учитывать возможные циклы событий.
Событие input вызывается на каждый символ, что при
AutoNumeric усиливается из-за дополнительного форматирования.
Следствие:
Решение:
Если сторонний код ожидает «сырое» значение:
event.target.value
он может получить неожиданный формат (1,234.00 вместо
1234).
AutoNumeric может изменять значение прямо в обработке
input, что иногда приводит к:
AutoNumeric при каждом input пересчитывает строку и
может:
Это влияет на восприятие события: input может
срабатывать даже при внутренних коррекциях, не инициированных
пользователем напрямую.
input стабилен;input становится более «шумным».%;В сложных приложениях input используется только как
триггер UI-обновления:
input.addEventListener('input', () => {
queueMicrotask(() => {
const value = anElement.getNumber();
updateModel(value);
});
});
Такой подход позволяет:
При использовании AutoNumeric внутри <form>
событие input не влияет на отправку данных напрямую, но
участвует в:
Событие input в AutoNumeric можно рассматривать как
слой:
Его основная особенность — работа не с «сырым текстом», а с постоянно нормализуемым представлением числа, что делает его удобным для реактивных интерфейсов и одновременно требовательным к архитектуре обработки данных.