Интеграция AutoNumeric с HTML-формами начинается с привязки
экземпляров форматирования к стандартным элементам ввода. Библиотека
работает поверх обычных <input>-полей и изменяет
поведение отображения и ввода числовых значений, не нарушая стандартную
модель DOM.
Базовая инициализация строится вокруг создания экземпляра AutoNumeric для конкретного элемента:
import AutoNumeric from 'autonumeric';
const input = document.querySelector('#price');
const anElement = new AutoNumeric(input, {
decimalCharacter: ',',
digitGroupSeparator: ' ',
currencySymbol: '₸',
currencySymbolPlacement: 's',
minimumValue: '0'
});
В результате поле ввода начинает автоматически форматировать значение в соответствии с заданными правилами, при этом внутреннее значение остаётся числовым и может быть получено без форматирования.
HTML-формы часто содержат набор числовых полей, каждое из которых требует отдельной конфигурации. AutoNumeric позволяет инициализировать несколько элементов независимо, сохраняя единый подход к управлению экземплярами.
const elements = document.querySelectorAll('.numeric');
const instances = [];
elements.forEach((el) => {
instances.push(
new AutoNumeric(el, {
decimalPlaces: 2,
decimalCharacter: '.',
digitGroupSeparator: ',',
modifyValueOnWheel: false
})
);
});
Такая структура позволяет централизованно управлять всеми числовыми полями формы, включая массовое обновление, сброс значений или синхронизацию настроек.
Ключевой аспект интеграции заключается в корректном извлечении данных при сабмите формы. AutoNumeric хранит «сырой» числовой формат отдельно от отображаемого значения.
const form = document.querySelector('#form');
form.addEventListener('submit', (event) => {
event.preventDefault();
const data = {
price: instances[0].getNumber(),
tax: instances[1].getNumber()
};
console.log(data);
});
Метод getNumber() возвращает значение без
форматирования, что исключает необходимость дополнительной обработки
строк.
AutoNumeric разделяет отображение и внутреннее значение. При изменении значения программно важно учитывать необходимость синхронизации.
instances[0].set(15000.5);
При вызове set() автоматически обновляется как
отображаемое значение, так и внутреннее числовое представление. Это
особенно важно при динамических пересчётах значений в форме.
HTML5-валидация может работать совместно с AutoNumeric, однако
требует учета форматирования. Атрибуты min,
max и step продолжают функционировать, если
внутреннее значение корректно извлекается.
<input id="amount" type="text" min="0" max="10000" required />
const amount = new AutoNumeric('#amount', {
minimumValue: '0',
maximumValue: '10000'
});
При этом стандартная проверка формы использует уже числовое значение,
если извлечение происходит через getNumber() до
отправки.
В ряде сценариев требуется изменение формата в процессе работы формы. AutoNumeric поддерживает обновление конфигурации без пересоздания экземпляра.
instances[0].update({
decimalPlaces: 0,
currencySymbol: '$'
});
Такой подход используется при переключении режимов отображения, например между валютным и процентным форматом.
AutoNumeric предоставляет события, позволяющие отслеживать изменения значения в реальном времени. Это важно для форм с зависимыми полями.
input.addEventListener('autoNumeric:rawValueModified', (e) => {
console.log(e.detail.newRawValue);
});
События позволяют синхронизировать вычисляемые поля, такие как налоговые расчёты, скидки или итоговые суммы.
Формы часто содержат поля, значения которых зависят от других вводимых данных. AutoNumeric упрощает реализацию подобных сценариев за счёт стабильного API получения чисел.
const price = instances[0];
const quantity = instances[1];
const total = new AutoNumeric('#total', { readOnly: true });
function recalc() {
const result = price.getNumber() * quantity.getNumber();
total.set(result);
}
price.domElement.addEventListener('input', recalc);
quantity.domElement.addEventListener('input', recalc);
Подобная структура исключает необходимость ручного парсинга строк и предотвращает ошибки округления.
При использовании асинхронной отправки формы важно извлекать значения до сериализации данных.
form.addEventListener('submit', async (e) => {
e.preventDefault();
const payload = {
price: instances[0].getNumber(),
quantity: instances[1].getNumber()
};
await fetch('/api/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
});
});
Форматированные значения не используются напрямую, так как содержат разделители групп и символы валют.
При работе с динамическими интерфейсами (например, SPA) важно корректно уничтожать экземпляры AutoNumeric, чтобы избежать утечек памяти.
instances.forEach((an) => {
an.remove();
});
Метод remove() восстанавливает исходное поведение
input-элемента и удаляет привязанные обработчики.
При создании полей на лету требуется повторная инициализация AutoNumeric после вставки DOM-элемента.
const container = document.querySelector('#container');
function addField() {
const input = document.createElement('input');
input.type = 'text';
container.appendChild(input);
const instance = new AutoNumeric(input, {
decimalPlaces: 2
});
instances.push(instance);
}
Такая схема позволяет масштабировать формы без потери функциональности форматирования.
AutoNumeric перехватывает операции вставки и корректирует вводимые данные. Это особенно важно при вставке значений из внешних источников, где могут присутствовать символы группировки или валют.
new AutoNumeric('#input', {
allowDecimalPadding: true,
selectOnFocus: true
});
Вставляемые значения автоматически нормализуются до числового формата, соответствующего текущей конфигурации.
При передаче данных на сервер рекомендуется использовать исключительно числовые значения. Форматированные строки не должны участвовать в серверной логике, так как могут приводить к неоднозначной интерпретации.
AutoNumeric обеспечивает разделение представления и данных, что упрощает согласование клиентской и серверной частей системы обработки форм.