Маски ввода для телефонных номеров решают три ключевые задачи:
-
Улучшение UX – визуальное руководство для пользователя.
-
Предотвращение ошибок – блокировка неверных символов.
-
Стандартизация – единый формат данных для обработки.
Рассмотрим реализацию на Inputmask и альтернативы.
1. Подключение библиотек
Требования:
-
Обязателен jQuery (версии 1.7+).
-
Inputmask поддерживает и "ванильный" JavaScript, но с jQuery интеграция проще.
Подключение:
<!-- jQuery -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<!-- Inputmask -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.inputmask/5.0.6/jquery.inputmask.min.js"></script>Ссылки:
-
Inputmask GitHub (документация и примеры)
2. Базовая настройка Inputmask
Пример для поля с ID #phone:
$("#phone").inputmask("+7 (999) 999-99-99", {
placeholder: "_", // Символ-заполнитель
clearIncomplete: true, // Автоочистка неполных вводов
showMaskOnHover: false // Отключение подсказки при наведении
});Плюсы Inputmask:
-
Поддержка динамических масок (настраиваемые правила для разных символов).
-
Валидация на лету.
-
Широкая поддержка браузеров (включая IE9+).
Минусы:
-
Размер библиотеки (~45 KB минифицированной).
-
Может конфликтовать с другими плагинами, модифицирующими
valueполя.
3. Решение для AJAX и Битрикс
Проблема: В CMS Битрикс маска сбрасывается после AJAX-обновления (например, в компоненте заказа).
Решение:
BX.addCustomEvent('onAjaxSuccess', function() {
$("#soa-property-3").inputmask("+7 (999) 999-99-99");
});Совет: Для динамических полей используйте делегирование:
$(document).on('focus', '.js-phone-input', function() {
$(this).inputmask("+7 (999) 999-99-99");
});4. Альтернатива: jQuery Masked Input
Для легких проектов подойдет jQuery Masked Input:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.maskedinput/1.4.1/jquery.maskedinput.min.js"></script>Настройка:
$(".js-phone-mask").mask("+7 (999) 999-99-99");Плюсы:
-
Миниатюрный размер (~4 KB).
-
Простота настройки.
Минусы:
-
Нет встроенной валидации.
-
Устаревший код (последнее обновление — 2015 г.).
Дополнительные рекомендации
-
Валидация:
-
Добавьте проверку на сервере, даже если маска корректна на клиенте.
-
Используйте
inputmode="tel"для мобильных устройств:<input type="tel" id="phone" inputmode="tel">
-
-
Международные форматы:
Inputmask поддерживает маски для разных стран:$("#international-phone").inputmask("+9 (999) 999-99[99]");
-
Альтернативы без jQuery:
-
Cleave.js – легковесный и современный.
-
libphonenumber – продвинутая валидация от Google.
-
Вывод
-
Inputmask – лучший выбор для сложных проектов с AJAX.
-
Masked Input подойдет для простых сайтов без частых обновлений DOM.
-
Cleave.js или ванильные решения – оптимальны для современных приложений без jQuery.
Финальный совет: Протестируйте маску на реальных пользователях — иногда строгий формат увеличивает число отказов!