Отображение при получении фокуса

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

Базовый принцип работы фокуса

При получении фокуса элемент <input> продолжает содержать числовое значение, но AutoNumeric может переключать режим отображения между:

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

Поведение определяется набором параметров и внутренними событиями фокуса:

  • focus
  • blur
  • keydown
  • mouseup
  • click

AutoNumeric перехватывает эти события и применяет правила форматирования динамически.


Параметр selectOnFocus

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

Поведение

Если включён режим:

selectOnFocus: true

то при получении фокуса:

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

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

Вариант с отключённым выделением

selectOnFocus: false

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

  • значение остаётся без выделения
  • каретка устанавливается в позицию, соответствующую логике браузера или последнему положению
  • пользователь может редактировать число частично

Управление отображением при фокусе через emptyInputBehavior

Опция emptyInputBehavior влияет на то, как отображается пустое или нулевое значение при фокусе.

Основные режимы:

emptyInputBehavior: "focus"

При фокусе:

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

emptyInputBehavior: "zero"

  • при фокусе отображается 0 (или форматированный ноль)
  • каретка устанавливается после значения

emptyInputBehavior: "min"

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

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

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

Удаление разделителей тысяч

При фокусе часто применяется режим упрощённого отображения:

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

Пример:

1 234 567,89 → 1234567,89

Это улучшает редактируемость и снижает риск ошибок при вставке.


Управление символом валюты

Символ валюты может вести себя по-разному при фокусе:

Скрытие символа валюты

В некоторых конфигурациях:

  • символ валюты исчезает при фокусе
  • отображается только числовая часть

Сохранение символа валюты

В других режимах:

  • символ остаётся, но может смещаться
  • редактируемая часть отделяется визуально

Это регулируется параметрами форматирования валютного отображения и позицией символа (prefix/suffix).


Позиционирование каретки при фокусе

Каретка (caret) — ключевой элемент UX при редактировании чисел.

AutoNumeric управляет её поведением следующим образом:

Начальная позиция

При фокусе каретка может:

  • становиться в конец значения
  • становиться в начало (редко используется)
  • устанавливаться в позицию последнего ввода

Поведение при форматированных числах

Если в поле есть разделители:

1,234,567.00

то библиотека:

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

Сценарии изменения отображения при фокусе

Сценарий 1: редактирование суммы

При активации поля:

  • формат упрощается
  • выделяется всё значение
  • ввод заменяет текущее число

Это типично для финансовых форм.

Сценарий 2: точечное редактирование

При фокусе:

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

Используется в аналитических и инженерных интерфейсах.

Сценарий 3: ввод с нуля

При фокусе:

  • поле очищается визуально
  • отображается пустое состояние или ноль
  • ввод начинается без предварительного значения

Обработка события focus внутри AutoNumeric

При наступлении события focus выполняется последовательность операций:

  1. фиксация текущего значения
  2. переключение режима отображения
  3. возможное снятие форматирования
  4. установка каретки
  5. применение правил выделения

Важный момент: библиотека различает программный и пользовательский фокус, чтобы избежать конфликтов при автозаполнении и динамическом изменении DOM.


Взаимодействие с blur и восстановление формата

Отображение при фокусе тесно связано с обратным переходом:

  • при blur форматирование обычно восстанавливается
  • значение приводится к каноническому виду
  • символы группировки возвращаются

Таким образом формируется цикл:

blur → форматированное отображение
focus → упрощённое отображение

Особенности при вставке значения во время фокуса

Если пользователь вставляет значение (paste) в момент активного фокуса:

  • входные данные сначала нормализуются
  • затем очищаются от недопустимых символов
  • после этого пересчитывается формат отображения

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


Влияние локали на отображение при фокусе

Локализация напрямую влияет на то, как AutoNumeric перестраивает значение при активации поля:

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

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


Комбинации параметров, влияющих на поведение фокуса

Наиболее значимые комбинации:

Упрощённое редактирование

  • selectOnFocus: true
  • отключённые разделители при фокусе
  • скрытие валютного символа

Результат: быстрое полное перезаписывание значения.

Точное редактирование

  • selectOnFocus: false
  • сохранение форматирования
  • сохранение позиции каретки

Результат: редактирование отдельных частей числа.

Минималистичное отображение

  • скрытие всех вспомогательных символов при фокусе
  • отображение только числа

Результат: максимально чистое поле ввода.


Ограничения и побочные эффекты

При сложных форматах возможны особенности:

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

Эти эффекты обычно проявляются при нестандартных масках или кастомных конфигурациях форматирования.


Роль фокуса в общей архитектуре AutoNumeric

Фокус является точкой переключения между двумя состояниями:

  • режим отображения (presentation layer)
  • режим редактирования (editing layer)

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

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