В библиотеке Inputmask значение поля ввода разделяется на два уровня представления:
Такое разделение позволяет отделять визуальную форму ввода от данных, которые используются в логике приложения или отправляются на сервер.
После инициализации маски Inputmask перехватывает все операции записи
и чтения значения поля. Прямое использование input.value
возвращает уже отформатированную строку:
const input = document.querySelector("#phone");
console.log(input.value);
Если на поле установлена маска телефона, результат может выглядеть так:
+7 (777) 123-45-67
Однако фактические данные, которые часто требуются в бизнес-логике, содержат только цифры:
77771234567
Отображаемое значение всегда доступно через стандартное свойство DOM:
const maskedValue = input.value;
В jQuery-обёртке:
const maskedValue = $("#phone").val();
Это значение включает все символы маски и полностью соответствует тому, что видно пользователю.
Inputmask предоставляет отдельный механизм для извлечения данных без форматирования.
const unmasked = input.inputmask.unmaskedvalue();
const unmasked = $("#phone").inputmask("unmaskedvalue");
Результат зависит от конфигурации маски:
-, (,
), пробелы)В некоторых сценариях используется прямой вызов API:
const unmasked = Inputmask.unmask(input.value, {
mask: "+7 (999) 999-99-99"
});
Этот подход применяется, когда экземпляр маски не привязан к DOM-элементу или требуется преобразование строки вне контекста поля ввода.
Для анализа текущего состояния поля используется вспомогательный метод получения «пустой маски»:
const empty = input.inputmask.getemptymask();
Он возвращает строку, соответствующую исходной маске без введённых данных, например:
+7 (___) ___-__-__
Такой результат применяется для сравнения состояния заполненности или очистки формы.
Прямое присваивание через value не всегда корректно
обрабатывает маску:
input.value = "77771234567";
В этом случае Inputmask может не применить форматирование автоматически, если не инициирован соответствующий обработчик событий.
Для корректной работы рекомендуется использовать API библиотеки.
input.inputmask.setValue("77771234567");
Inputmask.setValue(input, "77771234567");
Оба варианта обеспечивают:
$("#phone").inputmask("setvalue", "77771234567");
При таком способе выполняется полный цикл обработки:
Если передаваемая строка не соответствует маске, Inputmask выполняет частичное заполнение:
input.inputmask.setValue("7777");
Результат может выглядеть как:
+7 (777) ___-__-__
Незаполненные позиции остаются в состоянии placeholder, определённом маской.
При работе с динамическими интерфейсами часто требуется обновление значения без повторной инициализации маски:
input.inputmask.setValue(newValue);
В этом режиме:
Очистка выполняется установкой пустого значения:
input.inputmask.setValue("");
или через jQuery:
$("#phone").inputmask("setvalue", "");
В результате поле возвращается к состоянию пустой маски.
Передача null или undefined
интерпретируется как пустое значение:
input.inputmask.setValue(null);
Фактический результат эквивалентен очистке поля. Однако поведение
может зависеть от конфигурации маски и опции
clearMaskOnLostFocus.
После установки значения библиотека выполняет внутреннюю нормализацию:
Это обеспечивает одинаковое поведение независимо от источника изменения: пользовательский ввод или программная установка.
| Способ | Поведение маски | Форматирование | Надёжность |
|---|---|---|---|
input.value = ... |
не гарантируется | частичное | низкая |
setValue(...) |
полная обработка | всегда применяется | высокая |
jQuery setvalue |
полная обработка | всегда применяется | высокая |
Прямое присваивание используется только в случаях, когда Inputmask ещё не инициализирован или требуется временное обходное решение.
В большинстве сценариев используется именно unmasked value:
const payload = {
phone: input.inputmask.unmaskedvalue()
};
Такой формат обеспечивает:
При числовых масках результат unmasked value может дополнительно нормализоваться:
При текстовых масках сохраняются только символы, определённые
правилами definitions.
Любое изменение значения через Inputmask сопровождается генерацией событий:
inputchangecomplete (при полном заполнении маски)Это обеспечивает возможность отслеживания состояния поля при установке значений программно и через пользовательский ввод.