Создание экземпляра AutoNumeric осуществляется через конструктор, принимающий DOM-элемент и объект конфигурации. Внутренне инициализация связывает поле ввода с системой форматирования чисел, обеспечивая преобразование отображаемого значения и его «сырого» представления.
Основной синтаксис:
new AutoNumeric(element, options);
Параметр element представляет HTML-элемент ввода, обычно
<input>, либо ссылку на DOM-ноду. Параметр
options задаёт поведение форматирования, включая
разделители, точность, правила округления и ограничения диапазона.
При вызове конструктора выполняется несколько последовательных этапов:
На уровне реализации создаётся объект состояния, содержащий как исходное значение, так и его форматированное представление.
Конструктор принимает как уже существующий DOM-элемент, так и селектор, который предварительно резолвится в элемент.
Пример передачи элемента:
const input = document.querySelector("#price");
new AutoNumeric(input, { decimalPlaces: 2 });
При использовании некорректного или отсутствующего элемента инициализация завершается без создания экземпляра, поскольку отсутствует точка привязки для управления вводом.
Конфигурация передаётся вторым аргументом и определяет поведение форматирования. Внутри конструктора происходит глубокое объединение с предустановленным набором параметров.
Основные категории параметров:
Форматирование чисел
Ограничения
Поведение ввода
Пример конфигурации:
new AutoNumeric(input, {
decimalPlaces: 3,
digitGroupSeparator: " ",
decimalCharacter: ",",
minimumValue: "0",
maximumValue: "100000"
});
После инициализации создаётся объект экземпляра, содержащий:
Это состояние обновляется при каждом событии ввода.
При создании экземпляра значение, уже находящееся в поле ввода, проходит парсинг. В зависимости от настроек выполняются операции:
После этого значение перезаписывается в отформатированном виде.
Конструктор допускает создание множества независимых экземпляров AutoNumeric на одной странице. Каждый экземпляр изолирует своё состояние и не влияет на другие поля.
new AutoNumeric(document.querySelector("#price"), { decimalPlaces: 2 });
new AutoNumeric(document.querySelector("#tax"), { decimalPlaces: 4 });
Каждый объект хранится в отдельной области памяти и управляется независимо через собственный API.
При попытке повторной инициализации на одном и том же элементе применяется проверка существующего экземпляра. Внутренний реестр AutoNumeric предотвращает дублирование и может либо обновить настройки, либо проигнорировать повторный вызов в зависимости от режима.
Механизм защиты предотвращает:
Конструктор автоматически привязывает обработчики событий:
inputkeydownfocusblurpasteЭти события используются для постоянного пересчёта значения и поддержания корректного формата в реальном времени. Обработчики добавляются в момент инициализации и удаляются при уничтожении экземпляра.
Внутри конструктора происходит различие между:
Все вычисления выполняются над числовой моделью, после чего результат преобразуется обратно в строку с учётом настроек форматирования.
При отсутствии конфигурации используется набор стандартных параметров AutoNumeric. Эти параметры определяют базовое поведение:
Переопределение происходит только для явно указанных опций, остальные остаются неизменными благодаря механизму глубокого слияния объектов.
При передаче значения, содержащего символы, не относящиеся к числам, конструктор выполняет очистку входных данных. В зависимости от настроек могут применяться разные стратегии:
Результат всегда приводится к внутреннему числовому состоянию.
Созданный через конструктор объект предоставляет доступ к методам управления:
Эти методы работают поверх состояния, созданного в момент инициализации, и используют его как базовую точку для всех операций.
Помимо прямого вызова конструктора, допускается использование фабричных методов библиотеки, которые внутри всё равно опираются на ту же логику конструктора. Различие заключается только в способе передачи параметров и массовой инициализации элементов.
В процессе создания экземпляра применяются оптимизации:
Эти механизмы позволяют снижать нагрузку при работе с большим количеством полей ввода одновременно.