Библиотека AutoNumeric поддерживает механизм контроля допустимых значений. При вводе числа компонент постоянно проверяет, не выходит ли значение за установленные пределы. Основу этой системы составляют параметры:
minimumValuemaximumValueoverrideMinMaxLimitsОграничения работают как при ручном вводе, так и при программном изменении значения через методы API.
new AutoNumeric('#price', {
minimumValue: '0',
maximumValue: '1000'
});
В этом примере поле не позволит выйти за диапазон от 0
до 1000.
Во время набора символов AutoNumeric анализирует текущее состояние значения после каждого изменения. Проверка происходит не только после завершения ввода, но и в процессе редактирования.
Например:
new AutoNumeric('#discount', {
minimumValue: '0',
maximumValue: '50'
});
Попытка ввести 60 приведёт к одному из вариантов
поведения:
Конкретный сценарий определяется настройкой
overrideMinMaxLimits.
Этот параметр определяет реакцию AutoNumeric на превышение минимального или максимального значения.
Поддерживаются режимы:
| Значение | Поведение |
|---|---|
ceiling |
запрещает превышение максимума |
floor |
запрещает уменьшение ниже минимума |
ignore |
игнорирует ограничения |
invalid |
допускает ввод невалидного значения |
doNotOverride |
использует стандартное поведение |
Режим ceiling запрещает ввод значений выше
maximumValue.
new AutoNumeric('#amount', {
minimumValue: '0',
maximumValue: '100',
overrideMinMaxLimits: 'ceiling'
});
Если пользователь попытается ввести 150, библиотека:
100.Поведение зависит от текущего состояния поля и способа ввода.
ceiling ориентирован исключительно на максимум.
minimumValue: '-100',
maximumValue: '100',
overrideMinMaxLimits: 'ceiling'
В этом случае:
150 — запрещено;-500 — может быть разрешено во время ввода.Режим особенно полезен для:
floor действует противоположным образом — контролирует
минимальное значение.
new AutoNumeric('#temperature', {
minimumValue: '-20',
maximumValue: '50',
overrideMinMaxLimits: 'floor'
});
Попытка ввести значение ниже -20 будет отклонена.
| Значение | Результат |
|---|---|
-10 |
разрешено |
-20 |
разрешено |
-25 |
запрещено |
Режим invalid разрешает ввод значений вне диапазона, но
помечает их как невалидные.
new AutoNumeric('#score', {
minimumValue: '0',
maximumValue: '100',
overrideMinMaxLimits: 'invalid'
});
Теперь можно ввести 150, однако AutoNumeric будет
считать значение некорректным.
Этот режим применяется в сложных интерфейсах, где:
const anElement = new AutoNumeric('#score', {
minimumValue: '0',
maximumValue: '100',
overrideMinMaxLimits: 'invalid'
});
if (!anElement.isValid()) {
console.log('Значение вне диапазона');
}
ignore полностью отключает проверку диапазона.
new AutoNumeric('#freeInput', {
minimumValue: '0',
maximumValue: '100',
overrideMinMaxLimits: 'ignore'
});
В этом режиме ограничения фактически перестают работать.
Даже при ignore сохраняются:
Отключается только контроль диапазона.
doNotOverride использует внутреннее поведение библиотеки
без принудительной коррекции.
new AutoNumeric('#nativeBehavior', {
minimumValue: '0',
maximumValue: '100',
overrideMinMaxLimits: 'doNotOverride'
});
Это значение считается наиболее близким к базовой логике AutoNumeric.
Эти режимы часто путают.
isValid().AutoNumeric проверяет диапазон не только при ручном вводе, но и при вставке через буфер обмена.
new AutoNumeric('#payment', {
minimumValue: '0',
maximumValue: '5000',
overrideMinMaxLimits: 'ceiling'
});
Если вставить:
10000
библиотека попытается:
Метод set() также учитывает лимиты.
anElement.set(2000);
Если максимум равен 1000, возможны варианты:
Это зависит от режима overrideMinMaxLimits.
Некоторые режимы принудительно приводят число к допустимому диапазону.
new AutoNumeric('#field', {
minimumValue: '0',
maximumValue: '100',
overrideMinMaxLimits: 'ceiling'
});
Ввод:
150
может автоматически превратиться в:
100
При наборе числа пользователь проходит через промежуточные состояния.
Например, при вводе -100:
--1-10-100AutoNumeric должен учитывать, что часть состояний временно неполные.
Слишком строгие ограничения могут мешать вводу:
minimumValue: '0'
При попытке начать ввод с - символ может быть немедленно
удалён.
Количество десятичных знаков также влияет на контроль диапазона.
new AutoNumeric('#price', {
minimumValue: '0',
maximumValue: '10',
decimalPlaces: 2
});
| Ввод | Результат |
|---|---|
9.99 |
допустимо |
10.00 |
допустимо |
10.01 |
превышение |
AutoNumeric корректно работает с отрицательными диапазонами.
new AutoNumeric('#balance', {
minimumValue: '-1000',
maximumValue: '1000'
});
| Значение | Статус |
|---|---|
-1000 |
допустимо |
0 |
допустимо |
1000 |
допустимо |
1500 |
превышение |
Диапазоны могут задаваться строками высокой точности.
new AutoNumeric('#bigNumber', {
minimumValue: '-999999999999999.99',
maximumValue: '999999999999999.99'
});
Строковый формат используется специально для предотвращения проблем JavaScript с плавающей точкой.
AutoNumeric поддерживает события, позволяющие реагировать на нарушения диапазона.
const field = document.querySelector('#amount');
field.addEventListener('autoNumeric:invalidValue', (event) => {
console.log('Недопустимое значение');
});
AutoNumeric отвечает только за числовой диапазон и форматирование. Бизнес-логика обычно добавляется отдельно.
const value = anElement.getNumber();
if (value > userBalance) {
console.log('Недостаточно средств');
}
Неправильно:
maximumValue: 1000
Правильно:
maximumValue: '1000'
AutoNumeric ожидает строковые значения.
minimumValue: '100',
maximumValue: '0'
Такая конфигурация приводит к ошибкам и некорректной работе.
Плохо:
maximumValue: '1,000'
Правильно:
maximumValue: '1000'
Конфигурационные значения задаются без форматирования.
new AutoNumeric('#paymentAmount', {
currencySymbol: '$',
decimalCharacter: '.',
digitGroupSeparator: ',',
minimumValue: '1',
maximumValue: '10000',
overrideMinMaxLimits: 'ceiling'
});
new AutoNumeric('#percentage', {
minimumValue: '0',
maximumValue: '100',
overrideMinMaxLimits: 'invalid'
});
Такой подход удобен в интерфейсах с:
Пустое значение не считается превышением диапазона.
new AutoNumeric('#optionalField', {
minimumValue: '0',
maximumValue: '100',
emptyInputBehavior: 'null'
});
Пока поле пустое:
null.if (anElement.isValid()) {
console.log('Корректное значение');
}
const raw = anElement.getNumericString();
Возвращает числовую строку без форматирования.
const number = anElement.getNumber();
Возвращает обычное число JavaScript.
Система проверки диапазонов в AutoNumeric построена вокруг нескольких этапов:
overrideMinMaxLimits;Такой подход позволяет библиотеке одновременно: