Здравствуйте! Итак, постараюсь объяснить ситуацию. Есть страница сверстана на bootstrap, на которой есть три формы + одна форма во всплывающем модальном окне (оно открывается при нажатии кнопки "Позвоните мне"). К формам подключил проверку валидации с помощью bootstrap-validator и в скрипте прописал через запятые идентификаторы всех форм, включая ту, что в модальном, но валидация формы в модальном окне не работает (с остальными все ок!). Также я реализовал отправку писем с использованием php и снова все три формы отправляют письма, кроме той, что в мод окне. Если я правильно понял, то само модальное как-то мешает работе формы. Прошу помочь разобраться с этой проблемой. Код одной из трех форм: HTML: <form id="otpiska" action="post.php" method="POST"> <div class="row"> <h3>Закажите наш сервис мгновенной отписки от ненужных аккаунтов</h3> <div class="form-group col-md-4"> <input type="text" class="form-control" name="name" placeholder="Евгений Болобан" required> <span class="glyphicon form-control-feedback" aria-hidden="true"></span> </div> <div class="form-group col-md-4"> <input type="email" class="form-control" name="email" placeholder="Адрес почты" required> <span class="glyphicon form-control-feedback" aria-hidden="true"></span> </div> <div class="form-group col-md-4"> <button type="submit" class="btn btn-primary">отправить <i class="fa fa-envelope" aria-hidden="true"></i> </button> </div> </div> </form> Полный код модального окна с формой: HTML: <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#call"> <i class="fa fa-phone" aria-hidden="true"></i> Заказать звонок </button> <!--Modal--> <div class="modal fade" id="call"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header text-center"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title" id="myModalLabel">Оставьте свой номер <br>и наш менеджер позвонит Вам</h4> </div> <div class="modal-body"> <form id="callback" action="post.php" method="post"> <p><img src="img/time.png" alt="time">Ответ в течение 15 минут</p> <div class="form-group"> <input type="text" name="name" class="form-control" placeholder="Имя"> </div> <div class="form-group"> <input type="tel" name="mail" class="form-control" placeholder="Телефон: (066) 555 3333"> </div> <button type="submit" class="btn btn-primary">Позвоните мне</button> </form> </div> </div> </div> </div> Код файла post.php: PHP: <?PHP header("Content-Type: text/html; charset=utf-8");?><?// ----------------------------конфигурация-------------------------- //$adminemail="[email protected]"; // e-mail админа$date=date("d.m.y"); // число.месяц.год $time=date("H:i"); // часы:минуты:секунды $backurl="http://instarise.mediol.in.ua/index.html"; // На какую страничку переходит после отправки письма// Принимаем данные с формы $name=$_POST['name']; $email=$_POST['email'];// Проверяем валидность e-mailif (!preg_match("|^([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})|is",strtolower($email))){ echo"<center>Вернитесь <a href='javascript:history.back(1)'><B>назад</B></a>. Вы неверно указали почту!";} else { $msg=" Имя: $nameE-mail: $email"; // Отправляем письмо админу mail("$adminemail", "$date $time Новая заявка от $name", "$msg");// Сохраняем в базу данных $f = fopen("message.txt", "a+");fwrite($f," \n $date $time Новая заявка от $name");fwrite($f,"\n $msg ");fwrite($f,"\n ---------------");fclose($f);// Выводим сообщение пользователюprint "<script language='Javascript'><!--function reload() {location = \"$backurl\"}; setTimeout('reload()', 2000);//--></script><br><br><p><center><b>Сообщение отправлено!</b></center></p><p><center><b>Подождите, сейчас вы будете перенаправлены на главную страницу...</b></center></p>"; exit;}?>
Пользуйтесь инструментами разработчика в браузере. Прежде всего посмотрите, есть ли запрос при сабмите формы в модальном окне. Если нет, значит что-то мешает сабмиту, например, на форму навешен js обработчик, который перехватывает сабмит и не пускает дальше (тот же валидатор, например).
Я посмотрю,но валидацию эта форма тоже не проходит. Получается, что скрипт валидатора там тоже не работает.
Если на форму навешен валидатор и она валидацию не проходит, то, конечно, она никогда не засабмитится.
немного неправильно выразился. Я име ввиду, что валидация на форме не работает. То есть на всех формах кнопка "отправить" неактивна, пока незаполненны поля, а у формы в модальном окне валидация не работает (кнопка "Отправить" активна)
Смотрите консоль браузера. там должны быть какие-то ошибки. Ну, и вообще, без ссылки на сайт гадать бессмысленно.
Покажите код, которым вы прицепили аякс обработчик к форме обратного звонка. Она у вас сейчас отправляется путём перезагрузки страницы, такого быть не должно. И дело не в модальном окне, а в том, что js её не обрабатывает.
Код ЯваСкрипт: Код: $(function(){ $('.collapse').on('show.bs.collapse', function(){ $(this).prev().find('.fa').removeClass().addClass('fa fa-minus-circle'); }); $('.collapse').on('hide.bs.collapse', function(){ $(this).prev().find('.fa').removeClass().addClass('fa fa-plus-circle'); }); $('#mainform, #otpiska, #question, #callback').validator({ feedback: { success: 'fa fa-check-circle', error: 'fa fa-times-circle' } }); }) Код файла post.php: PHP: <?PHP header("Content-Type: text/html; charset=utf-8");?><?// ----------------------------конфигурация-------------------------- //$adminemail="[email protected]"; // e-mail админа$date=date("d.m.y"); // число.месяц.год $time=date("H:i"); // часы:минуты:секунды $backurl="http://instarise.mediol.in.ua/index.html"; // На какую страничку переходит после отправки письма// Принимаем данные с формы $name=$_POST['name']; $email=$_POST['email'];// Проверяем валидность e-mailif (!preg_match("|^([a-z0-9_\.\-]{1,20})@([a-z0-9\.\-]{1,20})\.([a-z]{2,4})|is",strtolower($email))){ echo"<center>Вернитесь <a href='javascript:history.back(1)'><B>назад</B></a>. Вы неверно указали почту!";} else { $msg=" Имя: $nameE-mail: $email"; // Отправляем письмо админу mail("$adminemail", "$date $time Новая заявка от $name", "$msg");// Сохраняем в базу данных $f = fopen("message.txt", "a+");fwrite($f," \n $date $time Новая заявка от $name");fwrite($f,"\n $msg ");fwrite($f,"\n ---------------");fclose($f);// Выводим сообщение пользователюprint "<script language='Javascript'><!--function reload() {location = \"$backurl\"}; setTimeout('reload()', 2000);//--></script><br><br><p><center><b>Сообщение отправлено!</b></center></p><p><center><b>Подождите, сейчас вы будете перенаправлены на главную страницу...</b></center></p>"; exit;}?>
Нет, потому что я в теге form указал action="post.php" method="post" и вся обработка формы идет в файлк ПХП
Вы поняли о чём я писал выше? Все формы должны отправляться аяксом. И это абсолютно никак не влияет на их возможность быть обработанными на сервере с помощью php кода!
Я слабо понимаю почему только Аяксом, а не с перезагрузкой, так еще не очень опытный в этих делах. Вы не могли бы посмотреть весь сайт, если скину архив или указать источник, на котором можно внятно прочесть об этом?
Потому что на дворе 2017 год и перезагрузка должна быть исключительно при переходе между страницами (ну или смене языка), а не при отправке форм либо других действиях в пределах страницы. Да и при переходах она не обязательна, давно уже можно без неё обойтись. Вот неплохая статья с примером сабмита форм аяксом: https://scotch.io/tutorials/submitting-ajax-forms-with-jquery