При работе с числовыми полями одна из ключевых задач — контроль допустимого диапазона значений. Библиотека AutoNumeric предоставляет развитую систему ограничения чисел через параметры минимального и максимального значения, а также механизмы обработки ситуаций, когда пользователь пытается ввести число за пределами разрешённого диапазона.
Выход за границы возникает в нескольких сценариях:
Без контроля диапазона возникают ошибки:
minimumValue и
maximumValueОсновой механизма являются два параметра:
new AutoNumeric('#price', {
minimumValue: '0',
maximumValue: '100000'
});
В этом примере:
0;100000.Попытка выхода за пределы диапазона приводит к автоматической обработке библиотекой.
new AutoNumeric('#amount', {
maximumValue: '5000'
});
Если пользователь вводит:
7000
то библиотека:
Поведение зависит от дополнительных настроек.
new AutoNumeric('#quantity', {
minimumValue: '1'
});
Попытка ввода:
0
или:
-5
приведёт к отклонению значения.
overrideMinMaxLimitsПараметр overrideMinMaxLimits определяет стратегию
поведения при выходе за диапазон.
overrideMinMaxLimits: 'ceiling'
или:
overrideMinMaxLimits: 'floor'
или:
overrideMinMaxLimits: 'ignore'
или:
overrideMinMaxLimits: 'invalid'
Каждый режим реализует собственную логику обработки.
ceilingРежим ceiling ограничивает значения верхней
границей.
new AutoNumeric('#salary', {
minimumValue: '0',
maximumValue: '10000',
overrideMinMaxLimits: 'ceiling'
});
Если вводится:
15000
то итоговое значение автоматически станет:
10000
Это особенно полезно:
floorРежим floor принудительно удерживает значение выше
минимальной границы.
new AutoNumeric('#discount', {
minimumValue: '0',
maximumValue: '100',
overrideMinMaxLimits: 'floor'
});
Попытка установить:
-20
даст результат:
0
floor и ceilingAutoNumeric автоматически применяет обе границы диапазона.
new AutoNumeric('#percent', {
minimumValue: '0',
maximumValue: '100',
overrideMinMaxLimits: 'ceiling'
});
Результаты:
| Ввод | Итог |
|---|---|
120 |
100 |
1500 |
100 |
-5 |
0 |
ignoreРежим ignore отключает принудительное исправление.
new AutoNumeric('#value', {
minimumValue: '0',
maximumValue: '100',
overrideMinMaxLimits: 'ignore'
});
Пользователь может временно вводить:
200
или:
-50
При этом:
Подход полезен:
invalidРежим invalid помечает выход за диапазон как ошибочное
состояние.
new AutoNumeric('#score', {
minimumValue: '0',
maximumValue: '10',
overrideMinMaxLimits: 'invalid'
});
Значение:
15
не будет автоматически исправлено.
Поле сохранит некорректное состояние до исправления пользователем.
AutoNumeric активно использует событие blur.
Последовательность работы:
Пример:
new AutoNumeric('#price', {
minimumValue: '0',
maximumValue: '1000'
});
Пользователь вводит:
5000
После blur поле автоматически изменится на:
1000
Во время набора пользователь может вводить временно некорректные состояния.
Например:
-
или:
0.
или:
0001
Библиотека учитывает:
Это предотвращает “ломание” ввода.
new AutoNumeric('#sum', {
minimumValue: '0'
});
Теперь:
-1
невозможно установить.
new AutoNumeric('#temperature', {
minimumValue: '-100',
maximumValue: '100'
});
Диапазон становится симметричным.
Одна из самых частых задач.
new AutoNumeric('#percent', {
minimumValue: '0',
maximumValue: '100',
suffixText: '%'
});
Теперь невозможно:
new AutoNumeric('#money', {
minimumValue: '0',
maximumValue: '1000000',
currencySymbol: '$'
});
Такая конфигурация защищает систему от:
Пользователь может вставить:
999999999
через Ctrl+V.
AutoNumeric проверяет диапазон и применяет те же правила, что и при ручном вводе.
set()const an = new AutoNumeric('#field', {
minimumValue: '0',
maximumValue: '100'
});
an.set(500);
Библиотека проверит диапазон автоматически.
an.set(1000);
Результат зависит от:
overrideMinMaxLimits
const settings = an.getSettings();
console.log(settings.minimumValue);
console.log(settings.maximumValue);
Иногда границы должны изменяться во время работы приложения.
an.update({
minimumValue: '10',
maximumValue: '500'
});
После вызова:
update()
новые ограничения применяются немедленно.
Частый сценарий — связь двух полей.
Например:
const minField = new AutoNumeric('#min');
const maxField = new AutoNumeric('#max');
minField.node().addEventListener('change', () => {
maxField.update({
minimumValue: minField.getNumericString()
});
});
Теперь максимальное значение не сможет быть меньше минимального.
Хотя maximumValue формально отвечает за диапазон, он
также ограничивает размер числа.
maximumValue: '999999'
исключает ввод:
1000000
new AutoNumeric('#decimal', {
minimumValue: '0',
maximumValue: '10.5'
});
Допустимые значения:
0
5.25
10.5
Недопустимые:
10.6
11
JavaScript использует тип Number, что может вызывать ошибки:
0.1 + 0.2
результат:
0.30000000000000004
AutoNumeric минимизирует подобные проблемы за счёт строкового представления значений.
new AutoNumeric('#big', {
maximumValue: '999999999999999.99'
});
Библиотека способна работать с очень крупными значениями без потери форматирования.
Некорректная конфигурация:
new AutoNumeric('#field', {
minimumValue: '100',
maximumValue: '10'
});
Такой диапазон невозможен.
AutoNumeric выдаёт ошибку и блокирует работу экземпляра.
isWithinRange()Некоторые версии и расширения AutoNumeric позволяют проверять диапазон отдельно.
Пример логики:
const value = an.getNumber();
if (value >= 0 && value <= 100) {
console.log('OK');
}
AutoNumeric отвечает только за форматирование и ограничения. Текст ошибок обычно реализуется отдельно.
input.addEventListener('change', () => {
const value = an.getNumber();
if (value > 100) {
error.textContent = 'Значение превышает лимит';
}
});
AutoNumeric может работать совместно с:
min;max;required;Пример:
<input
id="age"
type="text"
min="18"
max="99">
new AutoNumeric('#age', {
minimumValue: '18',
maximumValue: '99'
});
new AutoNumeric(inputRef.current, {
minimumValue: '0',
maximumValue: '1000'
});
При обновлении состояния важно синхронизировать:
mounted() {
this.an = new AutoNumeric(this.$refs.input, {
minimumValue: '0',
maximumValue: '100'
});
}
new AutoNumeric(element, {
minimumValue: '0',
maximumValue: '10000'
});
При реактивных формах ограничения часто дублируются через Validators.
Большое количество полей с динамическими диапазонами может влиять на производительность:
Оптимизации:
update();new AutoNumeric('#credit', {
currencySymbol: '$',
decimalPlaces: 2,
minimumValue: '1000',
maximumValue: '500000',
overrideMinMaxLimits: 'ceiling'
});
Поведение:
| Ввод | Результат |
|---|---|
500 |
1000 |
10000 |
10000 |
900000 |
500000 |
new AutoNumeric('#age', {
decimalPlaces: 0,
minimumValue: '0',
maximumValue: '120'
});
Исключаются:
new AutoNumeric('#rating', {
decimalPlaces: 1,
minimumValue: '0',
maximumValue: '5'
});
Допустимые значения:
4.5
3.7
5.0
Недопустимые:
5.5
10