Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.08.2017, 14:50
Интересующийся
Отправить личное сообщение для loony Посмотреть профиль Найти все сообщения от loony
 
Регистрация: 21.09.2016
Сообщений: 10

функция 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 отправить и вторую форму, то почему то отправится первая, соответственно с пустыми данными...Как избежать такой ситуации?
Ответить с цитированием
  #2 (permalink)  
Старый 10.08.2017, 15:03
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

А зачем два обработчика?
Ответить с цитированием
  #3 (permalink)  
Старый 10.08.2017, 15:08
Интересующийся
Отправить личное сообщение для loony Посмотреть профиль Найти все сообщения от loony
 
Регистрация: 21.09.2016
Сообщений: 10

Т.к у каждой формы свои поля нужно проверять. Чтобы громоский обработчик не писать, решил на каждую форму свой. А моя проблема из за нескольких обработчиков?
Ответить с цитированием
  #4 (permalink)  
Старый 10.08.2017, 15:17
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от loony
Т.к у каждой формы свои поля нужно проверять.
Не видно большой разницы в полях формы.
Ответить с цитированием
  #5 (permalink)  
Старый 10.08.2017, 15:26
Интересующийся
Отправить личное сообщение для loony Посмотреть профиль Найти все сообщения от loony
 
Регистрация: 21.09.2016
Сообщений: 10

Вообще форм гораздо больше, и был выбран общий принцип для всех, для этих двух действительно можно обойтись одним обработчиком, но это разве решит мою проблему?
Ответить с цитированием
  #6 (permalink)  
Старый 10.08.2017, 15:54
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

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

Infinite recursion, я правильно понял?
Ответить с цитированием
  #7 (permalink)  
Старый 10.08.2017, 16:11
Интересующийся
Отправить личное сообщение для loony Посмотреть профиль Найти все сообщения от loony
 
Регистрация: 21.09.2016
Сообщений: 10

Nexus, да все верно
Ответить с цитированием
  #8 (permalink)  
Старый 10.08.2017, 16:21
Интересующийся
Отправить личное сообщение для loony Посмотреть профиль Найти все сообщения от loony
 
Регистрация: 21.09.2016
Сообщений: 10

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

function resultRecapcha(){document.querySelector("#fast-feedback").submit();}
  function resultRecapcha2(){document.querySelector(".feedback-header").submit();}
Ответить с цитированием
  #9 (permalink)  
Старый 10.08.2017, 16:45
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

loony, Почему данные с формы отправляются на сервер?
Стандартное поведение формы при сабмите не воспроизводится?
Ответить с цитированием
  #10 (permalink)  
Старый 10.08.2017, 16:51
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одна функция в разных scope brainraider Angular.js 4 27.06.2016 06:51
Автоматический Submit нескольких форм Soeth Общие вопросы Javascript 10 17.03.2015 02:04
Функция для перевода размера из байтов в понятный для человека формат Антон Крамолов Ваши сайты и скрипты 4 05.04.2013 16:42
Несколько форм с одним классом + submit klev2004 Общие вопросы Javascript 8 09.07.2012 15:41
Функция submit() содержит изъян!!! a1exei Общие вопросы Javascript 5 09.01.2012 17:38