Метод setValue в библиотеке Inputmask отвечает за
корректную установку значения в элемент ввода с учётом активной маски. В
отличие от прямого присваивания value, данный метод
синхронизирует внутреннее состояние маски, пересчитывает позиции
символов, применяет правила форматирования и поддерживает
консистентность буфера ввода.
При использовании Inputmask значение поля ввода не является обычной строкой. Оно включает:
Прямое присваивание через input.value = "..." приводит к
несоответствию между отображаемым значением и внутренним состоянием
маски. Метод setValue решает эту проблему, выполняя полный
цикл обработки значения.
Ключевые операции внутри setValue:
Метод вызывается через экземпляр маски:
const im = new Inputmask("(999) 999-9999");
im.mask(document.querySelector("#phone"));
im.setValue("(123) 456-7890");
После вызова:
Прямое изменение DOM-значения:
input.value = "1234567890";
При активной маске приводит к следующим проблемам:
Эквивалент через Inputmask:
im.setValue("1234567890");
Результат:
(123) 456-7890;setValue может принимать как уже отформатированные строки, так и «чистые» данные.
im.setValue("1234567890");
Inputmask интерпретирует последовательность цифр и распределяет их по шаблону.
im.setValue("(123) 456-7890");
В этом случае происходит:
Поведение setValue зависит от конфигурации экземпляра
Inputmask.
Пример с alias:
Inputmask("decimal", {
rightAlign: false,
digits: 2
}).mask(input);
im.setValue("1234.5");
Особенности обработки:
Если переданное значение не полностью заполняет маску, Inputmask сохраняет частичное состояние:
im.setValue("123");
Для маски (999) 999-9999 результатом будет:
(123) ___-____
Поведение определяется настройками:
showMaskOnHovershowMaskOnFocusclearIncompleteplaceholderПосле установки значения Inputmask автоматически рассчитывает позицию курсора.
Механизм включает:
При необходимости каретка может быть установлена в конец заполненной части, если маска считается завершённой.
setValue часто применяется после загрузки данных или событий асинхронного обновления.
Пример с подгрузкой данных:
fetch("/api/user")
.then(res => res.json())
.then(data => {
im.setValue(data.phone);
});
Важный аспект:
Повторные вызовы метода полностью перезаписывают текущее состояние:
im.setValue("1111111111");
im.setValue("2222222222");
Каждый вызов:
setValue может триггерить события обновления:
onBeforeWriteonBeforeMaskonKeyValidationoncompleteonincompleteПорядок событий зависит от конфигурации и версии Inputmask.
Пример:
Inputmask("(999) 999-9999", {
oncomplete: () => console.log("complete"),
onincomplete: () => console.log("incomplete")
}).mask(input);
im.setValue("1234567890");
При работе с controlled components важно избегать конфликтов между state и Inputmask:
useEffect(() => {
im.setValue(props.value);
}, [props.value]);
Основная особенность:
При использовании директив маски:
watch(() => model.value, (val) => {
im.setValue(val);
});
Ключевой момент:
Метод может использоваться как альтернатива очистке:
im.setValue("");
Результат:
Если значение не соответствует допустимым символам маски:
im.setValue("abc!!!");
Inputmask:
Многократные вызовы setValue в короткий промежуток
времени приводят к:
В высоконагруженных интерфейсах обычно применяется:
При использовании автозаполнения браузера setValue часто применяется для нормализации результата: