Событие получения фокуса в полях, управляемых AutoNumeric, фиксирует момент перехода пользовательского ввода в активное состояние, когда элемент становится доступным для редактирования и начинает взаимодействовать с клавиатурным вводом. В контексте AutoNumeric это поведение дополняется логикой форматирования: отображаемое значение может временно трансформироваться, а внутреннее представление числа остаётся неизменным.
При активации поля (focus) библиотека может переключать режим отображения между форматированным и «сырым» значением в зависимости от конфигурации. Это позволяет управлять тем, что именно видит пользователь в момент редактирования: форматированное число с разделителями тысяч и валютными символами либо чистое числовое значение без визуального оформления.
AutoNumeric предоставляет механизм перехвата события focus через
встроенные опции и стандартные DOM-обработчики. На уровне DOM событие
focus срабатывает при переходе курсора в поле ввода:
const element = document.querySelector('#price');
element.addEventListener('focus', () => {
console.log('Поле получило фокус');
});
При использовании AutoNumeric логика усложняется тем, что библиотека может изменять отображаемое значение в момент фокуса. Например, если включена опция очистки форматирования при редактировании, визуальное представление числа становится «чистым»:
const anElement = AutoNumeric.multiple('.money-input', {
digitGroupSeparator: ' ',
decimalCharacter: ',',
unformatOnHover: false,
unformatOnFocus: true
});
В данном сценарии при активации поля значение 1 234,56
может быть преобразовано в 1234.56, чтобы облегчить
редактирование без визуальных отвлекающих символов.
Важным аспектом является сохранение внутреннего состояния. AutoNumeric всегда хранит числовое значение независимо от того, как оно отображается в input. Это значение доступно через API:
const anElement = AutoNumeric.getAutoNumericElement('#price');
element.addEventListener('focus', () => {
const rawValue = anElement.getNumericString();
console.log(rawValue);
});
Поведение при focus часто определяется настройками форматирования. Ключевые параметры:
unformatOnFocus — отключает форматирование при входе в
полеselectOnFocus — выделяет содержимое при активацииcaretPositionOnFocus — управляет позицией курсораshowOnlyNumbersOnFocus (в некоторых конфигурациях
поведения) — упрощает отображениеПример конфигурации, ориентированной на удобство редактирования:
AutoNumeric.multiple('.amount', {
digitGroupSeparator: ' ',
decimalCharacter: '.',
currencySymbol: '$ ',
currencySymbolPlacement: 'p',
unformatOnFocus: true,
selectOnFocus: true
});
При таком подходе фокус превращает визуально сложное значение в простой вводимый формат, а при потере фокуса значение возвращается к эстетически оформленному виду.
Событие blur фиксирует момент, когда элемент теряет активное состояние. В AutoNumeric именно на этом этапе чаще всего происходит повторное форматирование значения.
const element = document.querySelector('#price');
element.addEventListener('blur', () => {
console.log('Поле потеряло фокус');
});
При использовании AutoNumeric событие blur может сопровождаться
автоматическим применением маски форматирования. Например, после
редактирования пользователь вводит 1234.5, а при выходе из
поля значение преобразуется в 1 234,50.
Ключевая особенность заключается в том, что blur часто используется как триггер синхронизации данных с серверной моделью или состоянием приложения.
AutoNumeric применяет форматирование в момент потери фокуса, если включено стандартное поведение библиотеки. Это обеспечивает единообразие отображения данных в интерфейсе.
AutoNumeric.multiple('.price', {
digitGroupSeparator: ' ',
decimalCharacter: ',',
decimalPlaces: 2
});
При такой конфигурации вводимые данные автоматически нормализуются:
10001 000,00Это поведение критически важно для финансовых интерфейсов, где требуется строгая унификация представления чисел.
Часто необходимо получить «сырое» значение именно в момент потери фокуса, поскольку это точка фиксации пользовательского ввода.
const anElement = AutoNumeric.getAutoNumericElement('#price');
document.querySelector('#price').addEventListener('blur', () => {
const numericValue = anElement.getNumber();
console.log(numericValue);
});
Методы:
getNumber() — возвращает числовое значениеgetNumericString() — строковое представление числа без
форматированияgetFormatted() — текущее отображаемое значениеИспользование blur как триггера позволяет минимизировать количество промежуточных преобразований и работать с уже завершённым вводом.
События focus и blur тесно связаны с состоянием экземпляра AutoNumeric. При инициализации:
const anElement = new AutoNumeric('#price', {
currencySymbol: '€',
decimalCharacter: ',',
digitGroupSeparator: '.'
});
последовательность взаимодействия обычно выглядит следующим образом:
Эта цепочка обеспечивает предсказуемость поведения в интерфейсах с числовыми полями.
AutoNumeric может влиять на позицию курсора при активации поля. Это особенно важно при использовании разделителей групп и валютных символов.
AutoNumeric.multiple('.amount', {
currencySymbol: '$ ',
currencySymbolPlacement: 'p',
selectOnFocus: true
});
При включении selectOnFocus весь контент поля
выделяется, что снижает вероятность ошибок при редактировании.
Альтернативный подход — установка курсора в конец значения, что
используется в сценариях постепенного редактирования чисел.
В прикладных системах focus и blur часто используются как точки синхронизации состояния формы.
const anElement = AutoNumeric.getAutoNumericElement('#price');
const input = document.querySelector('#price');
input.addEventListener('blur', () => {
const value = anElement.getNumber();
formState.price = value;
validateField('price', value);
});
В этом сценарии blur выступает как финальный момент фиксации данных, после которого выполняется:
Focus в свою очередь может использоваться для подготовки поля:
input.addEventListener('focus', () => {
clearValidationError('price');
});
При частых переходах focus/blur важно учитывать производительность и стабильность отображения. AutoNumeric оптимизирован для таких сценариев, но некорректная логика обработчиков может приводить к лишним перерисовкам.
Типичный проблемный паттерн:
Для предотвращения нестабильности рекомендуется разделять:
В формах с множественными числовыми полями focus и blur часто применяются для управления контекстом редактирования:
document.querySelectorAll('.numeric').forEach((el) => {
el.addEventListener('focus', () => {
el.classList.add('active-field');
});
el.addEventListener('blur', () => {
el.classList.remove('active-field');
});
});
При использовании AutoNumeric это поведение дополняется автоматическим управлением значением, что позволяет разделить визуальную и логическую части взаимодействия.
AutoNumeric оперирует тремя основными представлениями значения:
На focus может меняться отображаемое представление, но numeric остаётся неизменным. На blur происходит синхронизация отображаемого значения с правилами форматирования.
input.addEventListener('focus', () => {
console.log(anElement.getFormatted());
});
input.addEventListener('blur', () => {
console.log(anElement.getFormatted());
});
Разница между этими состояниями проявляется в зависимости от настроек и режима редактирования.
AutoNumeric корректно реагирует на программные вызовы:
const input = document.querySelector('#price');
input.focus();
input.blur();
Однако важно учитывать, что программный blur может немедленно инициировать форматирование, что влияет на последующие операции с DOM. В сложных сценариях это требует строгого порядка вызовов:
Нарушение последовательности может приводить к рассинхронизации UI и модели данных.