В основе работы AutoNumeric лежит система контроля допустимого числового диапазона и формата отображения. Ограничения формируют поведение поля ввода: предотвращают выход за заданные границы, нормализуют формат числа и применяют правила округления. Внутренне библиотека разделяет ограничения на несколько независимых уровней, что позволяет гибко управлять тем, какие правила активны в конкретный момент.
Ключевые параметры, связанные с ограничениями, включают:
При этом ограничения применяются не только к вводу пользователя, но и к программным установкам значения через API. Любое значение проходит нормализацию, прежде чем попасть в DOM-элемент.
Логика ограничения значений в AutoNumeric строится вокруг единого принципа: любое значение приводится к допустимому диапазону до форматирования.
При вводе данных возможны три основных сценария:
Дополнительно учитываются правила округления, которые могут изменять итоговое значение даже в пределах допустимого диапазона. Это особенно важно при работе с валютами и точными расчётами.
Снятие ограничений в AutoNumeric не означает отключение механизма в целом, а подразумевает динамическое изменение параметров конфигурации таким образом, чтобы проверка диапазона перестала влиять на результат.
Основной подход заключается в изменении или удалении значений:
minimumValue устанавливается в null или
крайне низкое значениеmaximumValue устанавливается в null или
крайне высокое значениеПример динамического обновления конфигурации:
const an = new AutoNumeric('#input', {
minimumValue: "0",
maximumValue: "1000"
});
// снятие верхнего ограничения
an.update({
maximumValue: null
});
// снятие нижнего ограничения
an.update({
minimumValue: null
});
После такого изменения значение больше не подвергается проверке по соответствующей границе.
В случаях, когда требуется полностью убрать ограничение диапазона,
оба параметра задаются как неактивные. В зависимости от конфигурации
библиотеки это может быть реализовано несколькими способами: через
null, пустые строки или экстремальные числовые
значения.
Наиболее стабильный вариант — использование null:
an.update({
minimumValue: null,
maximumValue: null
});
После применения такой конфигурации поле перестаёт ограничивать числовой диапазон, сохраняя при этом форматирование, разделители и правила округления.
Иногда снятие ограничений выполняется через полное пересоздание экземпляра AutoNumeric. Это используется, когда требуется не только изменить диапазон, но и очистить все сопутствующие правила.
Процесс включает два этапа:
const an = new AutoNumeric('#input', {
minimumValue: "10",
maximumValue: "100"
});
// уничтожение текущего экземпляра
an.remove();
// повторная инициализация без ограничений
const anNew = new AutoNumeric('#input', {
minimumValue: null,
maximumValue: null
});
Такой подход обеспечивает полное сбрасывание внутреннего состояния форматтера.
AutoNumeric хранит данные в двух формах:
При снятии ограничений изменяется только логика проверки, но не структура хранения. Это означает, что:
Таким образом, снятие ограничений не превращает поле в «обычный input», а лишь расширяет допустимый диапазон значений.
Метод set сохраняет поведение форматирования даже при
отсутствии ограничений. Значение проходит через стандартный pipeline
обработки:
an.set(9999999999.99);
Метод setUnformatted позволяет обойти часть
форматирующих правил, но не отменяет их полностью. При активных
настройках форматирования значение всё равно может быть приведено к
нужному виду:
an.setUnformatted("123456.789");
При снятых ограничениях разница между этими методами становится менее выраженной, поскольку отсутствует этап принудительного ограничения диапазона.
Хотя диапазонные ограничения являются основным механизмом контроля, поведение числа также зависит от округления. В некоторых сценариях «снятие ограничений» достигается через изменение правил округления до минимально инвазивных.
Пример:
an.update({
roundingMethod: "S"
});
Использование нейтральных или «мягких» методов округления снижает вероятность принудительного изменения значения, даже при работе с большими числами.
Внутренне AutoNumeric поддерживает режимы, при которых форматирование может быть временно отключено. Это используется для массовых операций обновления значений.
Типовой сценарий:
an.unformat();
an.set("999999999999");
an.reformat();
В таком режиме часть ограничений не применяется до повторной активации форматтера, что фактически создаёт окно без контроля диапазона.
При активной работе с input-полями ограничения могут вмешиваться в поток ввода. Снятие ограничений позволяет передавать любые значения без вмешательства библиотеки в реальном времени.
Важным аспектом является поведение при событийной модели:
input — значение не корректируется по диапазону;blur — форматирование сохраняется, но без обрезки по
границам;Это особенно заметно при интеграции с внешними валидаторами, где контроль диапазона делегируется отдельному слою логики.
AutoNumeric может работать совместно с масками ввода, где ограничения формируются не только библиотекой, но и сторонними правилами. При снятии ограничений внутри AutoNumeric остаются активными внешние маски, что создаёт разделение ответственности:
an.update({
minimumValue: null,
maximumValue: null
});
В таком случае диапазон становится открытым, но структура числа сохраняется.
После отключения диапазонной проверки система начинает принимать значения произвольной величины. Однако ограничения вычислительной платформы остаются актуальными:
AutoNumeric не устраняет эти ограничения языка, а лишь перестаёт их искусственно обрезать.
Даже при полностью снятых ограничениях форматирование остаётся ключевым элементом поведения:
Таким образом, отключение ограничений влияет только на допустимый диапазон значений, но не на визуальную модель данных.
Гибкость AutoNumeric позволяет изменять ограничения в реальном времени без пересоздания экземпляра. Это достигается через механизм обновления конфигурации, который пересчитывает внутренние правила без разрыва связи с DOM-элементом.
Типичный цикл:
Такая модель обеспечивает непрерывность взаимодействия и предотвращает потерю состояния ввода.