Модальное окно Bootstrap 3 с формой, отправляющей email по Ajax (JQuery/PHP/HTML5/JqBootstrapValidation)
1) В шаблоне html делаем кнопку "Перезвоните мне", которая откроет модальное окно.
<a href="#myModal" role="button" data-toggle="modal"><img src="assets/img/recall.png" /></a>
Важно! Иногда такой вызов кнопки срабатывает только для главной страницы, на внутренних же ничего не происходит и модальное окно не открывается. Правильнее вызывать тегом <button>, вот так:
<button type="button" class="btn btn-default btn-sm" data-toggle="modal" data-target="#myModal"> Заказать обратный звонок </button>
другая причина: версия скрипта jquery должна быть выше 1.9.2 (например - jquery-2.1.0.min.js) !!
2) Сам код окошка тоже в любом месте страницы вставить
<!-- Modal --> <div id="myModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-body"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <!-- Form itself --> <form name="sentMessage" class="form form-register1" id="contactForm" novalidate> <div class="control-group"> <div class="controls"> <input type="text" class="form-control" onblur='if(this.value=="") this.placeholder="Ваше имя"' onfocus='if(this.value=="Ваше имя") this.value=""' placeholder="Ваше имя" id="name" required data-validation-required-message="Пожалуйста укажите ваше имя" /> <p class="help-block"></p> </div> </div> <div class="control-group"> <div class="controls"> <input type="text" class="form-control" onblur='if(this.value=="") this.placeholder="Телефон"' onfocus='if(this.value=="Телефон") this.value=""' placeholder="Телефон" id="phone" required data-validation-required-message="Пожалуйста, укажите номер телефона" /> </div> </div> <div id="success"> </div> <!-- For success/fail messages --> <button type="submit" class="btn btn-lg btn-3d pull-right">Отправить</button><br /> </form> </div><!-- End of Modal body --> </div><!-- End of Modal content --> </div><!-- End of Modal dialog --> </div><!-- End of Modal -->
<script type="text/javascript" src="assets/js/jquery-2.1.0.min.js?ver=1"></script> <script type="text/javascript" src="assets/js/bootstrap.min.js"></script> <script src="assets/js/jqBootstrapValidation.js"></script> <script src="assets/js/recall_me.js"></script>
4) recall_me.js
/* Jquery Validation using jqBootstrapValidation example is taken from jqBootstrapValidation docs */ $(function() { $("input,textarea").jqBootstrapValidation( { preventSubmit: true, submitError: function($form, event, errors) { // something to have when submit produces an error ? // Not decided if I need it yet }, submitSuccess: function($form, event) { event.preventDefault(); // prevent default submit behaviour // get values from FORM var name = $("input#name").val(); var phone = $("input#phone").val(); var email = $("input#email").val(); var message = $("textarea#message").val(); var firstName = name; // For Success/Failure Message // Check for white space in name for Success/Fail message if (firstName.indexOf(' ') >= 0) { firstName = name.split(' ').slice(0, -1).join(' '); } $.ajax({ url: "recall_me.php", type: "POST", data: {name: name, phone: phone}, cache: false, success: function() { // Success message $('#success').html("<div class='alert alert-success'>"); $('#success > .alert-success').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×") .append( "</button>"); $('#success > .alert-success') .append("<strong>Спасибо! Ваше сообщение отправлено.</strong>"); $('#success > .alert-success') .append('</div>'); //clear all fields $('#contactForm').trigger("reset"); setTimeout(function() { $("#myModal").modal('hide'); }, 4000); }, error: function() { // Fail message $('#success').html("<div class='alert alert-danger'>"); $('#success > .alert-danger').html("<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×") .append( "</button>"); $('#success > .alert-danger').append("<strong>Извините "+firstName+" кажется проблемы на сервере отправки писем...</strong> Вы не могли бы написать напрямую на адрес <a href='youremail@mail.com?Subject=Перезвоните мне'>youremail@mail.com</a> ? Приносим извинения за это неудобство!"); $('#success > .alert-danger').append('</div>'); //clear all fields $('#contactForm').trigger("reset"); }, }) }, filter: function() { return $(this).is(":visible"); }, }); $("a[data-toggle=\"tab\"]").click(function(e) { e.preventDefault(); $(this).tab("show"); }); }); /*When clicking on Full hide fail/success boxes */ $('#name').focus(function() { $('#success').html(''); });
5) в нём вызывается recall_me.php, скрипт, который отправляет письмо
<?php // check if fields passed are empty if(empty($_POST['name']) || empty($_POST['phone'])) { echo "No arguments Provided!"; return false; } $name = $_POST['name']; $phone = $_POST['phone']; // create email body and send it $to = 'youremail@mail.com'; // put your email $email_subject = "Вам отправлена форма - Перезвоните мне: $name"; $email_body = "Заполнена форма \"Перезвоните мне\". \n\n". "Данные отправителя:\n\nИмя: $name \n". "Телефон: $phone"; $headers = "From: contact@mail.com\n"; $headers .= "Reply-To:"; mail($to,$email_subject,$email_body,$headers); return true; ?>
6) jqBootstrapValidation - отсюда http://reactiveraven.github.io/jqBootstrapValidation/
Вот такая форма (тут ещё оформление css сделано):
Помогло:
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Вы можете почитать все статьи от almix'а.
- 0 Composer – пакетный менеджер PHP. Что и как? (22.07.2014)
- 0 MySQL и PHP: Вычисление возраста (количество лет) по дате рождения (20.06.2017)
- 0 Yii: Bootstrap tabs, делаем активной вкладку на которую выполняется переход по ссылке (20.03.2014)
- 0 CodeIgniter: Всплывающая форма обратной связи на Ajax в Bootstrap Modal и проверкой Captcha (18.02.2014)
- 0 Как изменить часовой пояс на сервере (16.11.2013)
- 0 PHP: Как удалить файлы по маске? (07.11.2013)
- 0 Регулярные выражения в PHP (12.04.2014)
- 0 Opencart: Модуль Filter Product OpenCart_v1.5.x: Как скрывать недоступные опции в фильтре (23.10.2013)
- 0 Защита от спама в phpBB3 без капчи (09.10.2013)
- 0 Php функция implode внутри запроса SELECT к MySQL. (02.09.2013)
- 0 Как убрать папку www из денвера? (22.03.2013)
- 0 Устанавливаем и настраиваем WampServer (аналог MAMP в Mac и возможная замена Denwer'у) на Windows (22.03.2013)
- 0 Полезные возможности PhpStorm и настройка горячих клавиш (14.03.2013)
- 0 WordPress: Добавить ссылку "Сохранить фото" для галереи на NextGen с эффектом Lightbox (12.04.2013)
- Артефакты при ресайзе библиотекой GD изображений с однородным (белым) фоном (07.12.2017)
- Задаем область печати документа для PHPExcel (05.12.2017)
- Выдвигающаяся из значка форма поиска на сайте (27.11.2017)
- Как включить SSL и сделать редирект на HTTPS. На примере Opencart 2 (03.12.2017)
- Как убрать placeholder при клике по input (04.11.2017)
- Смена кодировки Битрикса с windows-1251 в UTF-8 (utf8) (01.12.2017)
- Свой дизайн кнопок социальных сетей для сайта. Кнопки "Поделиться" (19.06.2017)
- Ошибка: Invalid argument supplied for foreach() in ... (09.04.2017)
- Загрузка файлов (картинок) по ajax через форму для Opencart (04.09.2016)
- Замена текста при наведении на него мышью. События onmouseover и onmouseout (25.03.2016)
- Прилипание блока к верху сайта при его прокручивании (17.02.2016)
2 комментариев
Для 2 форм на одной странице будет в файле скрипта recall_me.js выбор например по классу, чтобы отделить 2 формы:
и на странице для 2-й формы укажите id свой - contactForm1 и для сообщения success1, чтобы различались: