AutoNumeric полностью перехватывает управление вводом в числовых
полях, заменяя стандартное поведение <input>
собственной моделью форматирования и управления кареткой. Это означает,
что любая клавиатурная навигация должна рассматриваться не как работа с
«сырым» текстом, а как взаимодействие с форматированным числовым
представлением.
Фокус в поле, управляемом AutoNumeric, всегда переводится в режим
«контролируемого ввода», где:
- отображаемое значение может содержать разделители тысяч, символы
валют и префиксы/суффиксы;
- позиция каретки не совпадает напрямую с индексами строки
value;
- ввод и навигация интерпретируются через слой нормализации
библиотеки.
Ключевой момент: стандартные браузерные механики
(input.selectionStart, input.value) становятся
вторичными по отношению к внутреннему состоянию AutoNumeric.
Обработка клавиш
перемещения курсора
AutoNumeric переопределяет поведение стрелок и служебных клавиш для
корректной работы с форматированными числами.
Стрелки влево и вправо
- Перемещают каретку внутри числового выражения
- Игнорируют визуальные символы форматирования (разделители
групп)
- Перескакивают через символы, не относящиеся к числовому
значению
Особенность заключается в том, что позиция каретки вычисляется
относительно «логического числа», а не строки:
- запятая тысяч — пропускается
- пробелы-разделители — игнорируются
- символ валюты не участвует в навигации
Home и End
Клавиши Home и End работают в контексте
очищенного числового представления:
Home переводит каретку к первой значимой цифре (или к
знаку минус)
End переводит каретку в конец числовой части (после
последней значимой цифры)
При наличии префикса (например, валютного символа) поведение зависит
от конфигурации, но обычно:
- префикс исключается из области редактирования
- каретка не может «застревать» внутри служебных символов
Инкрементирование и
декрементирование значений
Одной из ключевых функций AutoNumeric является поддержка изменения
числового значения через клавиатуру без прямого редактирования
текста.
Стрелки вверх и вниз
ArrowUp увеличивает значение
ArrowDown уменьшает значение
Изменение происходит с учётом текущей позиции каретки:
- если каретка в разряде единиц → шаг 1
- если в разряде десятков → шаг 10
- если в дробной части → шаг определяется количеством знаков после
запятой
Пример логики:
123.45
- курсор на 3 → +1 / -1
- курсор на 2 (десятки) → +10 / -10
- курсор на 4 (десятые) → ±0.1
Это поведение может быть адаптировано настройками шага (step), но
базовая идея — контекстная чувствительность.
Tab и Shift + Tab
Навигация между элементами формы остаётся на уровне браузера, однако
AutoNumeric обеспечивает корректную синхронизацию состояния перед
потерей фокуса.
При Tab:
- выполняется финальная нормализация значения
- убираются промежуточные символы форматирования
- фиксируется внутреннее числовое состояние
При Shift + Tab дополнительно учитывается обратный
переход без изменения логики форматирования.
Backspace и
Delete в контексте форматирования
Удаление символов в AutoNumeric не является прямым удалением
строки.
Backspace
- удаляет ближайшую значимую цифру слева
- игнорирует разделители тысяч
- пересчитывает значение после удаления
Delete
- удаляет значимую цифру справа
- перескакивает через форматные символы
- поддерживает корректное смещение дробной части
Особенность: удаление всегда приводит к перерасчёту числа, а не к
модификации строки.
Работа с выделением
диапазона
Выделение текста (Shift + стрелки) работает в режиме
логической сегментации числа:
- выделение может включать только значимые цифры
- разделители автоматически игнорируются
- символы форматирования не участвуют в selection range
При вставке нового значения поверх выделения происходит:
- нормализация входных данных
- фильтрация недопустимых символов
- перерасчёт числа с учётом локали
Конфигурационные
параметры, влияющие на навигацию
Поведение клавиатуры в AutoNumeric определяется рядом параметров,
которые изменяют интерпретацию событий.
caretPositionOnFocus
Определяет позицию каретки при получении фокуса:
- начало числа
- конец числа
- сохранение последней позиции
Влияние на навигацию:
- определяет стартовую точку всех клавиатурных операций
- влияет на первый шаг ArrowUp / ArrowDown
selectOnFocus
При включении:
- всё значение выделяется при фокусе
- первая клавиатурная операция заменяет значение целиком
При выключении:
- сохраняется позиция каретки
- навигация работает инкрементально
decimalPlacesShownOnFocus
Изменяет отображение дробной части при фокусе:
- при фокусе может увеличивать точность отображения
- влияет на шаг изменения стрелками вниз/вверх
Это важно для навигации по дробным значениям, так как изменяет
«глубину» активных разрядов.
Взаимодействие клавиатуры
с локалями
AutoNumeric учитывает региональные настройки:
- десятичный разделитель (
, или .)
- разделитель тысяч (пробел, точка, запятая)
- порядок символов валют
Навигация адаптируется под эти параметры:
- стрелки не пересекают разделитель дробной части
- курсор не может остановиться между цифрой и разделителем
- шаг изменения сохраняет локальную точность представления
Сложные сценарии навигации
Быстрое изменение значения
Комбинация ArrowUp/Down с удержанием:
- увеличивает/уменьшает значение по ускоряющейся шкале
- ускорение может зависеть от длительности нажатия
- перерасчёт происходит без потери точности
Переход между разрядами
При перемещении каретки:
- десятки → единицы → десятые → сотые
- перескок между разрядами сохраняет контекст изменения шага
Это позволяет управлять числом без ручного редактирования строки.
Работа с отрицательными
числами
Клавиатурная навигация учитывает знак:
- не является частью навигационного диапазона
- Home может переводить каретку перед первым числом после знака
- изменение значения сохраняет знак до пересечения нуля
Типовые проблемы и их
причины
Каретка «прыгает» при вводе
Причина:
- повторная форматирующая перерисовка строки
- пересчёт позиции без синхронизации selection
Невозможно попасть в
определённую позицию
Причина:
- символ является форматным (разделитель)
- AutoNumeric блокирует невалидные позиции каретки
Непредсказуемый шаг стрелок
Причина:
- несоответствие позиции каретки и логического разряда
- влияние дробной части и настроек step
Поведенческая
модель клавиатуры как конечный автомат
Навигация в AutoNumeric фактически реализуется как состояние:
- состояние фокуса
- состояние каретки
- числовое значение
- формат отображения
Каждое нажатие клавиши запускает переход:
- декодирование клавиши
- вычисление логической позиции
- трансформация значения (если требуется)
- повторное форматирование
- восстановление каретки
Эта модель обеспечивает стабильность при работе с форматированными
числами, где прямое редактирование строки невозможно без потери
структуры.