Снятие ограничений

В основе работы AutoNumeric лежит система контроля допустимого числового диапазона и формата отображения. Ограничения формируют поведение поля ввода: предотвращают выход за заданные границы, нормализуют формат числа и применяют правила округления. Внутренне библиотека разделяет ограничения на несколько независимых уровней, что позволяет гибко управлять тем, какие правила активны в конкретный момент.

Ключевые параметры, связанные с ограничениями, включают:

  • minimumValue — нижняя граница допустимого значения
  • maximumValue — верхняя граница допустимого значения
  • decimalPlaces — количество знаков после запятой
  • decimalPlacesRawValue — точность внутреннего представления
  • roundingMethod — стратегия округления
  • allowDecimalPadding — принудительное выравнивание дробной части

При этом ограничения применяются не только к вводу пользователя, но и к программным установкам значения через API. Любое значение проходит нормализацию, прежде чем попасть в DOM-элемент.

Поведение ограничений при различных сценариях

Логика ограничения значений в AutoNumeric строится вокруг единого принципа: любое значение приводится к допустимому диапазону до форматирования.

При вводе данных возможны три основных сценария:

  • значение находится внутри диапазона — применяется форматирование без изменений;
  • значение ниже minimumValue — выполняется принудительное поднятие до нижней границы;
  • значение выше maximumValue — выполняется обрезка до верхней границы.

Дополнительно учитываются правила округления, которые могут изменять итоговое значение даже в пределах допустимого диапазона. Это особенно важно при работе с валютами и точными расчётами.

Снятие ограничений через изменение конфигурации

Снятие ограничений в 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. Это используется, когда требуется не только изменить диапазон, но и очистить все сопутствующие правила.

Процесс включает два этапа:

  1. удаление текущего экземпляра;
  2. инициализация нового с изменённой конфигурацией.
const an = new AutoNumeric('#input', {
  minimumValue: "10",
  maximumValue: "100"
});

// уничтожение текущего экземпляра
an.remove();

// повторная инициализация без ограничений
const anNew = new AutoNumeric('#input', {
  minimumValue: null,
  maximumValue: null
});

Такой подход обеспечивает полное сбрасывание внутреннего состояния форматтера.

Влияние снятия ограничений на внутреннее представление данных

AutoNumeric хранит данные в двух формах:

  • форматированное значение в DOM;
  • «сырое» числовое значение для вычислений.

При снятии ограничений изменяется только логика проверки, но не структура хранения. Это означает, что:

  • внутреннее значение продолжает поддерживать числовой тип;
  • форматирование остаётся активным;
  • правила округления продолжают применяться при вводе.

Таким образом, снятие ограничений не превращает поле в «обычный input», а лишь расширяет допустимый диапазон значений.

Работа с set и setUnformatted при отключённых ограничениях

Метод 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 остаются активными внешние маски, что создаёт разделение ответственности:

  • AutoNumeric перестаёт ограничивать диапазон;
  • маска продолжает ограничивать структуру ввода (разделители, символы, длина).
an.update({
  minimumValue: null,
  maximumValue: null
});

В таком случае диапазон становится открытым, но структура числа сохраняется.

Поведение при крайних значениях после снятия ограничений

После отключения диапазонной проверки система начинает принимать значения произвольной величины. Однако ограничения вычислительной платформы остаются актуальными:

  • переполнение чисел с плавающей точкой;
  • потеря точности при больших значениях;
  • ограничение JavaScript Number.MAX_SAFE_INTEGER.

AutoNumeric не устраняет эти ограничения языка, а лишь перестаёт их искусственно обрезать.

Сохранение форматирования при отсутствии ограничений

Даже при полностью снятых ограничениях форматирование остаётся ключевым элементом поведения:

  • разделители тысяч продолжают применяться;
  • количество знаков после запятой регулируется настройками;
  • символы валют сохраняются;
  • отрицательные числа отображаются согласно конфигурации.

Таким образом, отключение ограничений влияет только на допустимый диапазон значений, но не на визуальную модель данных.

Динамическая архитектура снятия ограничений

Гибкость AutoNumeric позволяет изменять ограничения в реальном времени без пересоздания экземпляра. Это достигается через механизм обновления конфигурации, который пересчитывает внутренние правила без разрыва связи с DOM-элементом.

Типичный цикл:

  • текущее состояние с ограничениями;
  • частичное или полное снятие ограничений через update;
  • продолжение работы без перезапуска экземпляра.

Такая модель обеспечивает непрерывность взаимодействия и предотвращает потерю состояния ввода.