Механизм удаления маски в Inputmask основан на полном разрыве связи между DOM-элементом и внутренним экземпляром маски, включая очистку обработчиков событий, восстановление исходного поведения ввода и корректную обработку значения поля. В отличие от временного отключения форматирования, удаление маски означает деактивацию всей логики библиотеки на конкретном элементе и возврат его к состоянию обычного input без дополнительных преобразований.
При применении маски к элементу создаётся экземпляр, который хранит:
Удаление маски должно корректно очистить все эти компоненты, иначе остаются «хвосты» в виде активных слушателей или неконсистентного значения поля.
Особенно критично это в динамических интерфейсах (SPA), где элементы часто пересоздаются или переключаются между режимами ввода.
Базовый API удаления реализуется через статический метод:
Inputmask.remove(document.getElementById("phone"));
В момент вызова происходит:
После выполнения поле становится обычным HTML-элементом
<input> без форматирования и контроля ввода.
В случаях, когда маска была создана и сохранена в переменную, возможен доступ к экземпляру:
const im = new Inputmask("+7 (999) 999-99-99");
im.mask(document.getElementById("phone"));
im.remove(document.getElementById("phone"));
Здесь важно понимать, что удаление не связано с конкретным экземпляром напрямую — операция выполняется над элементом, а не над конфигурацией. Поэтому повторное использование объекта маски после удаления возможно, но без привязки к старому состоянию DOM.
Одним из ключевых аспектов является сохранение или преобразование текущего значения input.
При удалении маски возможны два сценария:
По умолчанию текущее визуальное значение остаётся в поле:
+7 (777) 123-45-67 → +7 (777) 123-45-67
Но теперь оно перестаёт интерпретироваться как маска.
Если маска использовала алиасы или были включены опции типа
autoUnmask, возможна ситуация, когда значение возвращается
к исходному виду:
+77771234567
Поведение зависит от конфигурации, с которой маска была создана, и от того, включена ли логика автоматического преобразования.
Удаление маски не идентично получению «чистого значения».
Inputmask.remove() — деактивирует маску на
элементе;inputmask.unmaskedvalue() — возвращает значение без
форматирования, но не снимает саму маску.Пример различия:
const el = document.getElementById("phone");
Inputmask("+7 (999) 999-99-99").mask(el);
// получение чистого значения
const raw = el.inputmask.unmaskedvalue();
// удаление маски
Inputmask.remove(el);
После удаления поле теряет метод inputmask, поскольку
объект маски уничтожается.
При установке маски библиотека добавляет набор событий:
Удаление маски должно гарантированно снять все эти слушатели. В противном случае возникают типичные ошибки:
Внутренне библиотека хранит ссылки на обработчики, что позволяет
корректно их удалить при вызове remove.
Inputmask активно управляет placeholder-ом, особенно при включённых
опциях showMaskOnFocus и showMaskOnHover.
После удаления:
Пример:
<input id="phone" placeholder="+7 (___) ___-__-__">
После удаления маски поле будет использовать только этот placeholder без изменений.
После вызова удаления элемент становится «чистым», и к нему можно повторно применить любую маску:
const el = document.getElementById("phone");
Inputmask.remove(el);
Inputmask({
mask: "+1 (999) 999-9999"
}).mask(el);
При повторной установке создаётся новый экземпляр, полностью независимый от предыдущего.
В SPA-приложениях часто требуется переключение режимов ввода. Типичный сценарий:
Корректный порядок операций:
const el = document.getElementById("phone");
Inputmask.remove(el);
Inputmask({
mask: "+7 (999) 999-99-99"
}).mask(el);
Если пропустить удаление, возможны конфликты старой и новой конфигурации, особенно при различии альясов или определения символов.
Метод удаления поддерживает работу с коллекциями элементов:
const inputs = document.querySelectorAll(".phone");
inputs.forEach(el => Inputmask.remove(el));
Каждый элемент очищается независимо, включая события и состояние.
При массовом удалении важно учитывать порядок:
В ситуациях, когда элемент удаляется из DOM, маску желательно снять заранее:
const el = document.getElementById("phone");
Inputmask.remove(el);
el.remove();
Это предотвращает:
Хотя современные реализации частично защищены от этого, явное удаление остаётся более надёжной практикой в сложных интерфейсах.
При использовании jQuery-плагина для Inputmask удаление выполняется через тот же метод:
$("#phone").inputmask("remove");
или через прямой вызов API:
Inputmask.remove($("#phone")[0]);
Важно учитывать, что jQuery-обёртка не хранит отдельного состояния маски — вся логика делегируется основному экземпляру.
Inputmask.remove(el);
Inputmask.remove(el);
Вторая операция может быть безопасной, но часто приводит к лишним проверкам и неочевидному поведению в старых версиях библиотеки.
Inputmask.remove(); // некорректно
Метод требует конкретный DOM-элемент.
Inputmask.remove(el);
el.inputmask.unmaskedvalue(); // ошибка
После удаления объект маски уничтожается.
Если маска использовалась как часть валидации формы, её удаление влияет на:
После удаления поле становится обычным input, и любая логика проверки должна учитывать этот переход.
| Состояние | До удаления | После удаления |
|---|---|---|
| Форматирование | Активно | Отсутствует |
| Обработчики событий | Управляются библиотекой | Удалены |
| Метод inputmask | Доступен | Недоступен |
| Ввод символов | Ограничен | Свободный |
| Маскирование значения | Присутствует | Отсутствует |
Удаление маски является финальной стадией её жизненного цикла. В типичном сценарии он выглядит так:
Корректная реализация этого этапа обеспечивает предсказуемое поведение интерфейса и предотвращает накопление неиспользуемых обработчиков и состояний внутри приложения.