Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   функция submit от разных форм отправляет всегд одну (https://javascript.ru/forum/dom-window/70104-funkciya-submit-ot-raznykh-form-otpravlyaet-vsegd-odnu.html)

loony 10.08.2017 14:50

функция submit от разных форм отправляет всегд одну
 
Помогите разобраться где косяк.

НА странице 2 формы

<form id="fast-feedback" action="" method="post" onsubmit="return onSubmit()">
	<input type="hidden" value="0" id="form_checked_q" name="email">
	<input type="hidden" value="" name="fast-feedback">
	<div class="head">Быстрая заявка</div>
	<div class="row-order">
		<div class="inp-name">Контактный телефон:</div>
		<div class="inp-cont"><input class="quick_inp" type="text" name="tel" required=""></div>
	</div>
	<div class="row-order">
		<div class="inp-name">Адрес сайта:</div>
		<div class="inp-cont"><input class="quick_inp" type="text" name="url"></div>
	</div>
	<div class="row-order">
		<div class="wrap-confid"><input type="checkbox" checked=""><a href="/confidential.pdf" target="_blank">Я согласен с условиями конфиденциальности </a></div>
<div style="display:none;" class="g-recaptcha" data-sitekey="6LfEuSIUAAAAAOEwmLGKzTgGg4Pr1K19OFPBQFTD" data-callback="resultRecapcha" data-size="invisible"></div>
<input type="submit" name="quick_form11" onclick="yaCounter1967302.reachGoal('goal2'); return true;" value="Отправить заявку">
	</div>
</form>

<form action="" method="post" class="feedback-header" onsubmit="return onSubmit2()">
	<div class="row">
		<div class="col-xs-6">
			<div class="inp-name">Ваше Имя*:</div>
			<input type="text" id="acpro_inp1" name="name" required="">
			<div class="inp-name">Телефон:*</div>
			<input type="text" id="acpro_inp2" name="phone" required="">
		</div>
		<div class="col-xs-6">
			<div class="inp-name">Адрес сайта:</div>
			<input type="text" id="acpro_inp4" name="url">
		</div>
	</div>
	<p class="in-z">* – Обязательно заполните поля, отмеченные «звёздочкой»</p>
	<div class="wrap-confid"><input type="checkbox" checked=""><a href="/confidential.pdf" target="_blank">Я согласен с условиями конфиденциальности </a></div>
<div style="display:none;" class="g-recaptcha" data-sitekey="6LfEuSIUAAAAAOEwmLGKzTgGg4Pr1K19OFPBQFTD" data-callback="resultRecapcha2" data-size="invisible"></div>
	<input type="submit" name="but_return" value="Отправить заявку">

</form>


Вот функции:
// Проверка быстрая заявка
  function onSubmit() {
      var x = document.querySelector("input[name='tel']").value;
      if(x == ""){
      }else{grecaptcha.execute();}
      return false;
  }
  // Проверка обратный звонок
  function onSubmit2() {
      var x = document.querySelector("input[name='name']").value;
      var y = document.querySelector("input[name='phone']").value;
      if(x == "" || y == ""){
      }else{grecaptcha.execute();}
      return false;
  }


grecaptcha.execute(); - вызывает гугл капчу, если с капчей все ок, то идет вызов функции resultRecapcha и resultRecapcha2

Вот эти функции:
function resultRecapcha(){document.querySelector("#fast-feedback").submit();}
  function resultRecapcha2(){document.querySelector(".feedback-header").submit();}


А теперь сама проблема:

Заполняем первую форму, жмем кнопку "Отправить заявку", форма отправиться с перезагрузкой страницы, как бы на странице будет сформированный $_POST, если не сбрасывая $_POST отправить и вторую форму, то почему то отправится первая, соответственно с пустыми данными...Как избежать такой ситуации?

laimas 10.08.2017 15:03

А зачем два обработчика?

loony 10.08.2017 15:08

Т.к у каждой формы свои поля нужно проверять. Чтобы громоский обработчик не писать, решил на каждую форму свой. А моя проблема из за нескольких обработчиков?

laimas 10.08.2017 15:17

Цитата:

Сообщение от loony
Т.к у каждой формы свои поля нужно проверять.

Не видно большой разницы в полях формы.

loony 10.08.2017 15:26

Вообще форм гораздо больше, и был выбран общий принцип для всех, для этих двух действительно можно обойтись одним обработчиком, но это разве решит мою проблему?

Nexus 10.08.2017 15:54

Вставлю свои 5 копеек:
У автора у каждой формы установлен обработчик события «Submit» через атрибут.
После того как на любой из форм будет вызвано названное событие, должна осуществиться некая валидация данных и, в случае успешного прохождения этой валидации, будет отправлен запрос на сервер гугла для проверки корректности капчи.
Если каптча введена верно, то на этой форме снова будет вызвано событие «Submit».

Infinite recursion, я правильно понял?

loony 10.08.2017 16:11

Nexus, да все верно

loony 10.08.2017 16:21

После успешного ответа гугл вызываются как раз эти функции

function resultRecapcha(){document.querySelector("#fast-feedback").submit();}
  function resultRecapcha2(){document.querySelector(".feedback-header").submit();}

Nexus 10.08.2017 16:45

loony, Почему данные с формы отправляются на сервер?
Стандартное поведение формы при сабмите не воспроизводится?

Nexus 10.08.2017 16:51

Я тут подумал... а какой вообще смысл в reCaptcha, если её "валидацию" проверят клиент?
Если я отключу js на странице и отправлю форму на сервер, сервер в свою очередь будет проверять верна ли капча?
Если сервер не проверяет капчу, то и смысла в ней нет)


Часовой пояс GMT +3, время: 00:45.