При использовании AutoNumeric значения полей формы перестают быть
«сырыми» строками и становятся управляемыми форматированными данными.
Это означает, что стандартные механизмы сброса HTML-формы
(form.reset()) не всегда приводят к ожидаемому результату в
контексте числового форматирования. DOM-значение может вернуться к
начальному состоянию, но внутреннее состояние AutoNumeric остаётся
синхронизированным с предыдущим форматированным значением.
AutoNumeric хранит числовое значение отдельно от отображаемого. Внутреннее состояние включает:
При сбросе формы важно учитывать все три уровня, иначе возникает рассинхронизация между визуальным представлением и внутренним состоянием экземпляра.
HTML-механизм сброса формы работает на уровне DOM:
form.reset();
При использовании AutoNumeric это приводит к восстановлению
первоначального значения атрибута value у input-элемента,
однако:
Причина заключается в том, что AutoNumeric перехватывает ввод и
перезаписывает отображение, а reset() не инициирует
событий, которые триггерят перерасчёт форматирования.
Библиотека предоставляет методы управления состоянием, которые должны использоваться вместо или вместе со стандартным сбросом формы.
Основной способ сброса значения:
anElement.set(0);
или:
anElement.set('');
В зависимости от конфигурации:
0 используется для числового сбросаМетод setNumeric() позволяет работать напрямую с
числовым представлением:
anElement.setNumeric(0);
При работе с формами, содержащими множество AutoNumeric-инстансов, требуется хранить ссылки на все экземпляры:
const autoNumericInstances = AutoNumeric.multiple('.autoNumeric');
Сброс выполняется через итерацию:
autoNumericInstances.forEach((instance) => {
instance.set(0);
});
Такой подход гарантирует синхронизацию внутреннего состояния всех полей.
В некоторых сценариях требуется не просто очистка значений, а полный возврат к исходному состоянию DOM-элементов.
Используется метод remove():
AutoNumeric.getAutoNumericElement(input).remove();
После удаления экземпляра поле снова становится обычным input без форматирования.
Далее возможна повторная инициализация:
AutoNumeric.multiple('.autoNumeric');
Такой подход применяется при:
Комбинированный подход применяется при необходимости сохранить HTML-reset поведение, но восстановить корректное форматирование.
form.reset();
AutoNumeric.getAutoNumericElements().forEach((instance) => {
instance.refresh();
});
Метод refresh() заставляет AutoNumeric перечитать
текущее значение input и применить форматирование согласно текущим
настройкам.
Некоторые настройки AutoNumeric влияют на то, как именно поле реагирует на очистку:
null — поле становится пустымzero — сброс в 0min — установка минимального значенияfocus — поведение зависит от фокусаПри reset формы значение восстанавливается в соответствии с этим параметром.
Если включена опция:
unformatOnSubmit: true
то перед отправкой формы значение преобразуется в «сырое». Однако при reset это не влияет напрямую, но может приводить к визуальной рассинхронизации при последующем вводе.
При использовании событийного управления значениями (например, через
input, change, keyup) необходимо
учитывать, что reset формы не вызывает всех событий, которые использует
AutoNumeric для синхронизации.
Рекомендуемая последовательность:
form.reset();
requestAnimationFrame(() => {
AutoNumeric.getAutoNumericElements().forEach((instance) => {
instance.refresh();
});
});
В ряде архитектурных решений форма не сбрасывается целиком, а очищаются только числовые поля.
AutoNumeric.getAutoNumericElements().forEach((instance) => {
instance.set('');
});
Такой подход предпочтителен при:
Для восстановления первоначальных значений требуется хранение snapshot состояния:
const defaults = new Map();
AutoNumeric.getAutoNumericElements().forEach((instance) => {
defaults.set(instance.domElement, instance.getNumber());
});
Далее сброс:
AutoNumeric.getAutoNumericElements().forEach((instance) => {
instance.set(defaults.get(instance.domElement));
});
При использовании виртуального DOM стандартный
form.reset() может конфликтовать с повторным
рендерингом.
Типовой паттерн:
setFormState(initialState);
После этого AutoNumeric-инстансы обновляются через lifecycle-хук,
который вызывает set() или refresh().
Наиболее частые несоответствия:
Причина почти всегда связана с отсутствием явного вызова API AutoNumeric после DOM reset.
Используются три устойчивых подхода:
set() для каждого инстансаrefresh()form.reset() в пользу программного управления
состояниемВыбор зависит от архитектуры интерфейса и уровня контроля над DOM-структурой.