Очистка значения

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

При работе библиотеки одновременно существуют несколько уровней представления данных:

  • Форматированное значение — строка, отображаемая в input с разделителями тысяч, символами валюты и локализацией.
  • Сырые данные — числовое значение, используемое для вычислений.
  • Строковое неформатированное представление — промежуточная форма между вводом и числом.

Очистка затрагивает один или несколько из этих уровней в зависимости от используемого метода.

Ключевая особенность AutoNumeric заключается в строгом разделении отображения и хранения данных, поэтому «очистка» не всегда означает удаление значения как такового.

Метод clear()

Основной механизм сброса состояния — метод clear().

Поведение метода:

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

Типичный вызов:

anElement.clear();

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

Поведение emptyInputBehavior

Ключевая настройка, определяющая результат очистки:

  • null — внутреннее значение становится null;
  • zero — подставляется 0;
  • min — используется минимально допустимое значение;
  • focus — поведение зависит от состояния фокуса;
  • always — принудительное отображение значения даже при пустом вводе.

При очистке через clear() именно этот параметр определяет итоговое состояние модели данных.

Установка значения null

Очистка может быть реализована через метод set():

anElement.set(null);

В этом случае:

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

Поведение отличается от установки пустой строки, поскольку пустая строка трактуется как ввод пользователя, а не как отсутствие значения.

Отличие clear() от set()

Операции имеют различную семантику:

  • clear() — специализированный сброс состояния;
  • set(value) — универсальное присвоение значения.

При очистке через set('') возможна интерпретация как строкового ввода, тогда как clear() работает через внутренний механизм сброса модели.

Очистка через destroy и reinit

Полное удаление состояния экземпляра возможно через destroy():

anElement.destroy();

После этого:

  • форматирование отключается;
  • DOM-элемент возвращается к исходному виду;
  • дальнейшее использование требует повторной инициализации.

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

Очистка пользовательского ввода

При вводе символов пользователем библиотека непрерывно нормализует данные. Очистка может происходить и на уровне событий:

  • удаление всех символов в input;
  • обработка backspace до пустого состояния;
  • программное обнуление через API.

При достижении пустого состояния включается логика emptyInputBehavior.

Методы получения «пустого» состояния

Для проверки результата очистки используются методы:

anElement.getNumber();
anElement.getNumericString();
anElement.get();

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

  • getNumber() может возвращать null или 0 в зависимости от конфигурации;
  • getNumericString() возвращает пустую строку;
  • get() возвращает форматированное значение или пустую строку.

Таким образом, очистка не имеет единственного универсального результата на уровне API.

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

Перед вызовом очистки часто происходит приведение состояния:

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

Внутренний механизм AutoNumeric автоматически пересчитывает значение перед финальным применением очистки.

Очистка через unformat

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

anElement.unformat();

Данный процесс:

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

В связке с последующим set(null) формируется полный цикл очистки.

Событийная модель при очистке

При изменении значения с переходом в пустое состояние активируются события:

  • onChange
  • onInput
  • onFocusOut

Очистка может инициировать пересчёт только при изменении внутреннего состояния, поэтому повторный вызов clear() при уже пустом поле может не генерировать событий.

Учет локализации при очистке

Очистка значения также зависит от настроек локали:

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

При сбросе форматирования эти элементы удаляются, но могут быть восстановлены при повторном вводе или фокусе.

Принудительное приведение к пустому состоянию

Сценарии жесткой очистки используют комбинации методов:

anElement.set(null);
anElement.clear();

или

anElement.set('');

Поведение зависит от приоритета внутренних правил библиотеки и конфигурации.

Состояние после очистки

После выполнения очистки экземпляр сохраняет:

  • настройки форматирования;
  • ограничения min/max;
  • маску ввода;
  • привязанные события.

Удаляется только значение, но не конфигурация.

В рамках AutoNumeric это обеспечивает возможность многократного переиспользования одного инстанса без повторной инициализации.

Особенности повторной записи после очистки

После перехода в пустое состояние:

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

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