Верх страницы
Обложка к записи Маска ввода номера телефона в Elementor
Время для прочтения: 0 мин. 29 сек.

Маска ввода номера телефона в Elementor

Функционал форм в конструкторе страниц Elementor Pro — божественен, но, к большому сожалению, там отсутствует очень полезный паттерн для ввода номера телефона по маске, который очень облегчает заполнение форм пользователям. Это мы и постараемся исправить.

Описание

Данный метод работает на основе старой, но до сих пор популярной библиотеки Masked Input Plugin for jQuery. Репозиторий проекта уже давно заархивирован его автором, но попрежнему используется тысячами проектов по всему миру.

Формы на странице

Чтобы задать маски для всех форм, которые уже отображаются на странице, нужно использовать следующие сниппеты.

PHP

Первый код предназначен для подключения файла самой библиотеки Masked Input Plugin for jQuery:

add_action(
	'wp_enqueue_scripts',
	function () {
		wp_enqueue_script(
			'mihdan-masked-input',
			wp_upload_dir()['baseurl'] . '/FOLDER_NAME/jquery.maskedinput.min.js',
			array( 'jquery' ),
			'1.2',
			true
		);
	}
);

JavaScript

Второй код предназначен для инициализации библиотеки Masked Input Plugin for jQuery:

jQuery(
	function( $ ) {
		$( 'input[type="tel"]' ).mask(
			'+7-(999)-999-9999',
			{
				placeholder: ' '
			}
		);
	}
);

Формы внутри попапов

JavaScript

Для работы масок внутри попапов код сниппета для инициализации библиотеки нужно немного поменять:

jQuery(
	function( $ ) {
		$( document ).on(
			'elementor/popup/show',
			function ( event, id, instance ) {
				$( 'input[type="tel"]' ).mask(
					'+7-(999)-999-9999',
					{
						placeholder: ' '
					}
				);
			}
		);		
	}
);

Визуально

Для тех, кому лень читать и разбираться, Александр Парфилов из канала WPlovers записал специальный обучающий ролик:

Маска ввода телефона для Elementor, Contact Form 7 и любых форм обратной связиМаска ввода телефона для Elementor, Contact Form 7 и любых форм обратной связи

Ссылки

Автор: Кобзарёв Михаил

Русский разработчик с 20-ти летним стажем. Работаю с PHP, ООП, JavaScript, Git, WordPress, Битрикс, Joomla, Drupal, Opencart, DLE, Laravel, Moonshine, SuiteCRM.

Оптимизирую сайты под Google Page Speed, настраиваю импорты для больших магазинов на WooCommerce + WP All Import. Пишу плагины на заказ. Все мои услуги.

Веду блог о разработке, дайджест в телеграмме и в ВК.

Вы всегда можете нанять меня.

Комментарии
Подписаться
Уведомить о
guest

26 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Roman Morenetc
Roman Morenetc
3 лет назад

Здравствуйте! А вы проверяли работоспособность данного метода? Дело в том, что Элементор ругается на наличие скобок в поле ввода (которые маской подставляются) и не дает отправить форму. И сама маска должна быть в другом формате: +7 (***) ***-**-** — если девятки оставлять в маске, то девятки и выводятся, и вообще не получается ничего ввести

Roman Morenetc
Roman Morenetc
3 лет назад
Ответить на  Кобзарёв Михаил

Разобрался сам. Нельзя использовать стандартное поле для ввода телефона, поскольку там своя валидация. Нужно создать обычное текстовое поле, задать ему уникальный id, указать его соответственно в скрипте маски, тогда все работает! Спасибо за статью!

Павел Чатанов
3 лет назад
Ответить на  Roman Morenetc

Роман, не могу разобраться с маской и данным решением. Можно у Вас попросить скрин или кусочек кода? Заранее очень признателен!

Павел Чатанов
3 лет назад
Ответить на  Кобзарёв Михаил

Форма ElementorPro в попапе, там применен скрипт на маску:

Спойлер
<script>jQuery(
 function( $ ) {
  $( document ).on(
   ‘elementor/popup/show’,
   function ( event, id, instance ) {
    $( ‘input[type=»tel»]’ ).mask(
     ‘+7-(999)-999-9999’,
     {
      placeholder: ‘ ‘
     }
    );
   }
  );   
 }
);</script>

Всё срабатывает, но поле ввода телефона становится недоступным для ввода и символы из скрипта не удалить никак

Безымянный.png
Сергей
Сергей
2 лет назад
Ответить на  Павел Чатанов

jQuery(
  

function

( $ ) {
    $(

'input[type="tel"]'

).mask(
      

'+7-(999)-999-9999'

, <---------- Тут можно попробовать вместо 9 поставить "_"
      {
        placeholder:

' '
      }
    );
  }
);

Гость
Гость
1 год назад
Ответить на  Roman Morenetc

Я отредактировал tel.php и валидация стандартного поля для ввода телефона заработала как мне нужно. Да, это плохая практика, но не смог побороть эту проблему решением через хук.

ЧЕЛОВЕК СЛОВА
ЧЕЛОВЕК СЛОВА
3 лет назад

Добрый день! Работает. Но, как ее дополнить, чтобы если маска заполнена не до конца (не хватает цифр в номере), то выдавало бы ошибку и не отправляло форму? В данный момент, если человек отправляет форму и случайно пропускает цифру в номере, то Элементор спокойно отправляет форму, а я получаю пустое поле номера. Помогите, пожалуйста, это полностью закроет проблему! Нигде в интернете пока решения нет, у Саши Парфилова тоже.

Влад
Влад
2 лет назад

Мать моя женщина… Чтобы подключить простой скрипт, закидывают два плагина, пишут дополнительный код… Ребят, а вы у себя в доме на кухню через квартиры соседей не ходите случайно?

Alex
Alex
2 лет назад

Добрый вечер, спасибо за материал, на Элементор Про все заработало, однако, в формах Popup валидации нет. Вы пишите: Для работы масок внутри попапов код сниппета для инициализации библиотеки нужно немного поменять: и ниже код. Но можно ли подробнее расписать куда именно его вставить или где заменить чтобы валидация заработала в форме в всплывающих окнах. Спасибо!

Гость
Гость
1 год назад
Ответить на  Alex

Чтобы заработало в popup нужно вставить код/сниппет. Делюсь своим примером:

<script>
jQuery(document).ready(function($) {
 function initMask() {
$.mask.definitions[‘h’] = «9»;
  $(‘input[type=»tel»]’).mask(«+7 (h99) 999-99-99», {placeholder: «_»});
 }

 // Инициализируем маску для полей типа «tel» при загрузке страницы
 initMask();

 // Инициализируем маску после добавления всплывающего окна
 jQuery(document).on(‘DOMNodeInserted’, function(event) {
  var popupContext = $(event.target).closest(‘.elementor-popup-modal’);

  // Если всплывающее окно содержит класс «elementor-popup-modal», инициализируем маску в этом контексте
  if (popupContext.length > 0) {
   initMask();
  }
 });
});
</script>

В этом деле сейчас отлично помогает ChatGPT — ставишь задачу со всеми известными и получаешь весьма развёрнутый ответ. Либо скармливаешь код и просишь переделать со своими хотелками.

Последний раз редактировалось 1 год назад Гость ем
Иван
Иван
2 лет назад

Почему то не срабатывает маска на popup. Хотя все сделал по видео.
Не можете помочь?

Последний раз редактировалось 2 лет назад Иван ем
Владимир
Владимир
1 год назад
Ответить на  Кобзарёв Михаил

Это как? Я поставил ваш плагин, но про маску в номере там ни слова

Наталья
Наталья
1 год назад

По всей видимости в 23 году ничего из этого не работает

Вячеслав
Вячеслав
4 месяцев назад

Плагин Form Masks for Elementor PRO — намного более простое и изящное решение.

Просто меняете тип поля в форме Elementor с Tel на Text и во вкладе Advanced задаёте абсолютно любую маску, причём поддерживаются пробелы (чего данный скрипт не умеет). Не в обиду автору статьи, но это действительно в 100 раз проще) Хотя вероятно плагин появился позже, чем эта статья

adward
adward
3 месяцев назад

Не работает в попапах от elementor pro и на андроидах

Предыдущая запись

Давайте дружить
в Telegram

Авторский блог вашего покорного слуги в Telegram про web, программирование, алгоритмы, инструменты разработчика, WordPress, Joomla, Opencart, Laravel, Moonshine, фильмы и сериалы