Пустые значения

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

Поведение пустого поля как отдельного состояния

Внутри AutoNumeric пустое значение не всегда эквивалентно "" в DOM. Библиотека различает несколько концептуальных состояний:

  • визуально пустое поле ввода;
  • отсутствие числового значения во внутреннем состоянии;
  • значение, интерпретируемое как null или undefined;
  • значение, автоматически заменённое на 0 или другое число по конфигурации.

Эта разница критична, поскольку AutoNumeric работает не только как форматтер, но и как слой нормализации числового ввода.

Базовая конфигурация пустого ввода

Основной механизм управления поведением пустого значения задаётся через параметр:

emptyInputBehavior

Он определяет, как библиотека должна интерпретировать и преобразовывать пустой ввод.

Типичные варианты поведения:

  • "focus" — поле остаётся визуально пустым при фокусе;
  • "zero" — пустое значение интерпретируется как 0;
  • "min" — подставляется минимальное допустимое значение;
  • "max" — подставляется максимальное допустимое значение;
  • "null" — значение становится null;
  • "undefined" — значение становится undefined.

Каждый вариант влияет не только на отображение, но и на результат методов getNumber() и getFormatted().

Пример инициализации:

const anElement = new AutoNumeric("#price", {
    emptyInputBehavior: "null"
});

При такой конфигурации пустое поле не будет возвращать число, а перейдёт в логическое состояние отсутствующего значения.

Различие между визуальной пустотой и значением

Важный аспект заключается в том, что визуально пустой input не всегда означает отсутствие данных:

anElement.set("");

После выполнения такого вызова возможны разные сценарии:

  • при emptyInputBehavior: "zero" значение станет 0, хотя поле может выглядеть пустым;
  • при emptyInputBehavior: "null" внутреннее значение станет null;
  • при emptyInputBehavior: "focus" состояние останется визуально пустым, но библиотека будет хранить контекст предыдущего значения.

Это разделение позволяет избегать неоднозначности в бизнес-логике приложений.

Методы очистки значения

AutoNumeric предоставляет несколько способов перевода поля в пустое состояние.

Метод clear()

anElement.clear();

Поведение зависит от конфигурации emptyInputBehavior. В большинстве случаев метод приводит поле к пустому визуальному состоянию, но не гарантирует конкретное внутреннее значение.

Прямое присваивание пустой строки

anElement.set("");

Данный вариант более явно сигнализирует о необходимости сброса значения. Однако интерпретация также зависит от настроек.

Сброс через нулевое или граничное значение

Иногда пустое состояние эмулируется через предельные значения:

anElement.set(null);
anElement.set(undefined);

Результат зависит от того, разрешено ли соответствующее поведение в конфигурации.

Влияние allowDecimalPadding и форматирования

Пустые значения тесно связаны с форматированием. Например, при включённой настройке:

  • decimalPlaces
  • decimalPlacesRawValue
  • leadingZero

пустое значение может неожиданно превращаться в строку вида "0.00" или "0".

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

Получение значения при пустом вводе

Методы получения данных ведут себя по-разному:

anElement.getNumber();
anElement.getNumericString();
anElement.getFormatted();

При пустом поле возможны результаты:

  • null (если настроено соответствующее поведение);
  • 0;
  • NaN в некоторых режимах интерпретации;
  • "" при форматированном выводе.

Ключевой момент заключается в том, что AutoNumeric всегда возвращает значение в соответствии с внутренней моделью, а не с DOM-содержимым напрямую.

Сценарии потери пустого состояния

Существует несколько типичных ситуаций, в которых пустое значение может быть автоматически заменено:

1. Потеря фокуса

При emptyInputBehavior: "zero" при уходе с поля пустое значение преобразуется в 0.

2. Программное обновление

anElement.set(100);
anElement.set("");

В зависимости от порядка вызовов библиотека может нормализовать значение до числа.

3. Валидация min/max

Если заданы ограничения:

minimumValue: 10
maximumValue: 100

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

Особенности сериализации пустых значений

При интеграции с backend пустые значения часто становятся источником неоднозначности.

AutoNumeric предоставляет поведение, при котором:

  • null может сериализоваться как отсутствие поля;
  • 0 всегда сериализуется как числовое значение;
  • "" может быть либо отброшено, либо передано как строка.

Поэтому выбор emptyInputBehavior становится архитектурным решением, а не косметической настройкой.

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

При использовании AutoNumeric внутри React, Vue или Angular пустые значения часто конфликтуют с контролируемыми компонентами.

Типичная проблема:

  • DOM считает поле пустым;
  • модель данных хранит 0 или null;
  • UI визуально не синхронизирован.

Решение заключается в унификации внутреннего представления:

  • либо всегда использовать null для пустого состояния;
  • либо всегда использовать 0 как дефолт;
  • либо явно отслеживать пустую строку как отдельное состояние.

Пограничные случаи

Пустое значение при включённом currency symbol

Если используется префикс или суффикс:

{ currencySymbol: "$" }

пустое значение может отображаться как:

  • просто пустое поле;
  • символ без числа (редко, при некорректной конфигурации);
  • или полностью очищенное поле.

Пустое значение и отрицательные числа

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

  • -100 → "" → 0 (в зависимости от поведения).

Контроль через события

AutoNumeric генерирует события, которые позволяют отслеживать переход в пустое состояние:

  • изменение значения на пустое;
  • очистка через API;
  • программная нормализация.

Это используется для синхронизации состояния формы:

anElement.domElement.addEventListener("autoNumeric:rawValueModified", () => {
    // проверка на пустое состояние
});

Логическая модель пустого значения

С точки зрения внутренней логики AutoNumeric пустое значение — это не отсутствие данных, а отдельный режим состояния:

  • EMPTY_RAW_VALUE
  • NULL_VALUE
  • ZERO_FALLBACK
  • UNDEFINED_STATE

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