Опция removeMaskOnSubmit в библиотеке Inputmask
определяет, каким образом значение поля будет представлено в момент
отправки формы: сохраняется ли маска или из значения удаляются все
символы форматирования.
Основная задача параметра — управление тем, что именно попадёт в
FormData, сериализацию формы или отправку через стандартный
submit.
При значении false (поведение по умолчанию) в форму
отправляется значение вместе с маской. При значении true
маска удаляется, и на сервер уходит «чистое» значение без форматирующих
символов.
Маска в Inputmask — это визуальный слой, который помогает пользователю вводить данные в заданном формате (телефон, дата, номер карты). Однако фактическое значение может отличаться от отображаемого.
Опция removeMaskOnSubmit влияет только на момент
отправки формы и не меняет поведение поля во время ввода.
Поведение можно описать следующим образом:
removeMaskOnSubmit: false — отправляется
отформатированное значениеremoveMaskOnSubmit: true — отправляется «сырое»
значение без маскиВажно различать два состояния значения поля:
input.value) —
всегда может содержать маскуinputmask.unmaskedvalue()) — чистые данные без
служебных символовremoveMaskOnSubmit не меняет input.value до
отправки. Изменение происходит только в момент сериализации формы.
Это означает, что UI остаётся неизменным, но итоговый payload может отличаться.
При стандартной отправке формы Inputmask перехватывает событие submit и трансформирует значения input-полей согласно настройке.
Inputmask("+7 (999) 999-99-99", {
removeMaskOnSubmit: false
}).mask(document.querySelector("#phone"));
Отправляемое значение:
+7 (777) 123-45-67
Формат сохраняется полностью, включая скобки, пробелы и дефисы.
Inputmask("+7 (999) 999-99-99", {
removeMaskOnSubmit: true
}).mask(document.querySelector("#phone"));
Отправляемое значение:
+77771234567
Символы форматирования исключаются, остаётся только значимая часть строки.
Часто возникает путаница между removeMaskOnSubmit и
методом unmaskedvalue().
Метод:
inputmask.unmaskedvalue()
возвращает чистое значение в любой момент времени.
removeMaskOnSubmit работает иначе:
Таким образом:
| Механизм | Когда применяется | Что возвращает |
|---|---|---|
| unmaskedvalue() | вручную | чистое значение |
| removeMaskOnSubmit | при submit | чистое значение |
| input.value | всегда | значение с маской (если не изменено вручную) |
При использовании FormData или serialize()
(jQuery) Inputmask перехватывает момент формирования данных.
Пример:
const formData = new FormData(document.querySelector("form"));
Если removeMaskOnSubmit: true, то в
FormData попадёт уже очищенное значение.
Это особенно важно при отправке данных через AJAX, когда сервер ожидает строго нормализованные значения.
Настройка removeMaskOnSubmit фиксируется в момент
инициализации маски. Изменение объекта настроек после применения маски
не всегда влияет на уже инициализированные поля.
Корректный способ изменения поведения:
const el = document.querySelector("#phone");
Inputmask("999-999", {
removeMaskOnSubmit: true
}).mask(el);
При необходимости смены логики требуется повторная инициализация маски.
Для числовых значений (например, суммы):
При removeMaskOnSubmit: true удаляются все нечисловые
символы маски, но поведение зависит от конфигурации alias.
Пример:
1 234 567,89 ₽ → 1234567,89
Для дат:
ДД.ММ.ГГГГ
При удалении маски остаются только цифры:
12.05.2026 → 12052026
Такое поведение важно учитывать на сервере, где может потребоваться дополнительный парсинг.
Телефонные маски часто используют код страны и разделители.
+7 (777) 123-45-67 → +77771234567
Это наиболее типичный сценарий использования
removeMaskOnSubmit.
Браузерные механизмы автозаполнения могут вмешиваться в значение
input перед submit. Inputmask повторно нормализует значение перед
отправкой, если включён removeMaskOnSubmit.
Однако в сложных случаях (особенно при динамическом заполнении) возможно несоответствие между отображаемым и отправляемым значением до момента финальной обработки формы.
Если поле:
disabled — оно не попадает в submit вообще, независимо
от настройкиreadonly — участвует в submit, и
removeMaskOnSubmit применяется стандартноЭто важно при формировании форм с частично заблокированными полями.
При отправке формы через Jav * aScript:
form.submit();
или через клик по submit-кнопке, Inputmask всё равно перехватывает событие, если маска активна на поле.
Однако при обходе стандартного submit (например, ручная сборка JSON)
removeMaskOnSubmit не применяется автоматически.
Пример:
const value = document.querySelector("#phone").value;
В этом случае значение остаётся с маской, даже если
removeMaskOnSubmit: true.
removeMaskOnSubmit работает независимо от
clearMaskOnLostFocus.
Схожая по смыслу опция, но отличается по механике:
autoUnmask: true — значение автоматически хранится без
маскиremoveMaskOnSubmit: true — преобразование происходит
только при отправкеСовместное использование может приводить к избыточной обработке, если логика не разделена.
Опции типа greedy, placeholder,
showMaskOnHover не влияют на
removeMaskOnSubmit, так как относятся только к
отображению.
Распространённое заблуждение — ожидание, что input.value
изменится после submit. На практике изменение происходит только в
передаваемом значении.
При использовании одновременно:
removeMaskOnSubmit: trueunmaskedvalue()может возникать двойная обработка данных на стороне приложения.
Сервер, ожидающий форматированные данные (например, с дефисами), может некорректно обработать очищенные значения. Поэтому выбор значения параметра должен согласовываться с контрактом API.
При использовании:
$.ajax({
data: $("#form").serialize()
});
Inputmask вмешивается только если сериализация использует DOM значения. При кастомной сборке объекта JSON необходимо самостоятельно учитывать необходимость очистки.
Если input добавляется в DOM после инициализации формы, маска должна
быть применена явно. Иначе removeMaskOnSubmit не будет
учитывать новое поле.
Внутренне Inputmask при submit выполняет следующий порядок действий:
removeMaskOnSubmitЭтот механизм обеспечивает прозрачную интеграцию с нативным submit без необходимости дополнительного кода.