@DimaPolishuk

Как сделать появление Pop-up после отправки формы?

есть данная форма
<form method="post">
        <input type="text"  placeholder="Your name" autofocus required pattern="[a-z]{1,15}"/> 
        <input type="text" placeholder="Phone-number" required pattern="[0-9]{6,15}"/>
        <input type="email" placeholder="Email" required/> 
        <input class="button" type="submit"  rel="reg_form" value="request call"/>
      </form>


так я реализовал Попап
<div class="popup reg_form">
		  <span class="home"></span>
      <p class="popup_p">Request sent!</p>
      <p>We will call you as soon as we can.</p>
        <a class="close" href="#">Close</a>
        <button class="close">Close</button>
	    </div>


так попап появляется когда нажимаю на Submit
$(function () {
	$('input.button').click(function () {
		$('div.'+$(this).attr("rel")).fadeIn(500);
		$("body").append("<div id='overlay'></div>");
		$('#overlay').show().css({'filter' : 'alpha(opacity=80)'});
		return false;				
	});	
	$('a.close').click(function () {
		$(this).parent().fadeOut(100);
		$('#overlay').remove('#overlay');
		return false;
	});
	$('button.close').click(function () {
		$(this).parent().fadeOut(100);
		$('#overlay').remove('#overlay');
		return false;
	});
	});


но он появляется как только я нажму на submit а надо когда я нажму, пройдет валидация, если все поля заполнены успешно отправит форму и покажет попап, как это осуществить?
  • Вопрос задан
  • 3717 просмотров
Пригласить эксперта
Ответы на вопрос 2
RozMakc
@RozMakc
аяксом отправлять и слушать ответ, как я понимаю только так...
например:
<form method="post" id="myform">
        <input type="text"  placeholder="Your name" autofocus required pattern="[a-z]{1,15}"/> 
        <input type="text" placeholder="Phone-number" required pattern="[0-9]{6,15}"/>
        <input type="email" placeholder="Email" required/> 
        <input class="button" type="button" onclick="sendMyForm();"  rel="reg_form" value="request call"/>
</form>

<script type="text/javascript" language="javascript">
 	function sendMyForm() {
 	  var msg   = $('#myform').serialize();
        $.ajax({
          type: 'POST',
          url: 'res.php',
          data: msg,
          success: function(data) {

    $('.popup').fadeIn(500);
    $("body").append("<div id='overlay'></div>");
    $('#overlay').show().css({'filter' : 'alpha(opacity=80)'});

          },
          error:  function(xhr, str){
	    alert('Возникла ошибка: ' + xhr.responseCode);
          }
        });
 
    }
</script>
Ответ написан
trushka
@trushka
надо вешать обработчик не на клик кнопки, а на submit формы:
$("form").submit(function(){
// валидируем форму;
// отправляем данные на сервер;
// показываем попап;
return false // предотвращаем отправку формы и перезагрузку страницы
})
Как вариант, можно показать попап при отправке, потом при ответе от сервера в том же попапе показать результат, типа данные успешно отправились или ошибка.

Кстати, в обработчике сабмита в качестве this будет элемент формы, и очень просто получить доступ к полям: this.inputName.value - это значение содержащегося в форме <input name="inputName">

и ещё, что это за каменный век .css({'filter' : 'alpha(opacity=80)'})? Если даже хочеться, чтоб ие8 показывал, достаточно написать .css({'opacity' :80)}) - jQuery сам разберётся, если это ИЕ8- и задаст фильтр. Или .fadeTo(0, 80) - тогда даже show() можно не писать..
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы