Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.04.2016, 00:57
Новичок на форуме
Отправить личное сообщение для uran2282 Посмотреть профиль Найти все сообщения от uran2282
 
Регистрация: 29.04.2016
Сообщений: 5

Несколько одинаковых форм отправки на почту
Здравствуйте, вопрос неоднократно обсуждался, но так и не смог решить проблему. Имеется скрипт который передает данные в пхп, который отправляет данные на почту. Так как форм несколько то соответственно работает только одна, так как один и те же id нельзя использовать, это я уже уяснил. Но вот как поправить это все дело не приложу ума, из за низкого уровня знаний js

<form method="POST" id="feedback-form_1">

<input type="text" class="form_top_input" name="nameFF" required placeholder="Ваше имя" x-autocompletetype="name">

<input  type="text" name="messageFF" class="form_top_input" required placeholder="Телефон">
			
<button type="submit" class="btn_top"><img class="btn_head" src="img/button-head.png"></button>

</form>
</form>



document.getElementById('feedback-form_1').addEventListener('submit', function(evt){
  var http = new XMLHttpRequest(), f = this;
  evt.preventDefault();
  http.open("POST", "contacts.php", true);
  http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  http.send("nameFF=" + f.nameFF.value + "&messageFF=" + f.messageFF.value);
  http.onreadystatechange = function() {
    if (http.readyState == 4 && http.status == 200) {
      alert(http.responseText + ', Ваше сообщение получено.\nНаши специалисты ответят Вам в течении 2-х дней.\nБлагодарим за интерес к нашей фирме!');    
      f.messageFF.removeAttribute('value'); // очистить поле сообщения (две строки)
      f.messageFF.value='';
    }
  }
  http.onerror = function() {
    alert('Извините, данные не были переданы');
  }
}, false);


<?
if (array_key_exists('messageFF', $_POST)) {
   $to = '22222@gmail.com';
   $subject = 'Заполнена контактная форма с '.$_SERVER['HTTP_REFERER'];
   $subject = "=?utf-8?b?". base64_encode($subject) ."?=";
   $message = "Имя: ".$_POST['nameFF']."\nТелефон: ".$_POST['messageFF'];
   $headers = 'Content-type: text/plain; charset="utf-8"';
   $headers .= "MIME-Version: 1.0\r\n";
   $headers .= "Date: ". date('D, d M Y h:i:s O') ."\r\n";
   mail($to, $subject, $message, $headers);
   echo $_POST['nameFF'];
}
?>



Подскажите пожалуйста, желательно живым примером, как поправить скрипт так что бы он обрабатывал не id а классы, то есть что бы одинаковых форм можно было вставить несколько

Последний раз редактировалось uran2282, 29.04.2016 в 01:04.
Ответить с цитированием
  #2 (permalink)  
Старый 29.04.2016, 10:44
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

А зачем много одинаковых форм на странице? Хотя, если в этом есть необходимость, можно иметь на странице кучу форм, и если все их отправлять асинхронно, то обработчик можно установить так:

document.querySelectoor('form').addEventListener.. ..

При этом сервер может определять форму-источник запроса либо по скрытому полю, либо по именам полей как единому их ключу.
Ответить с цитированием
  #3 (permalink)  
Старый 04.05.2016, 16:23
Новичок на форуме
Отправить личное сообщение для uran2282 Посмотреть профиль Найти все сообщения от uran2282
 
Регистрация: 29.04.2016
Сообщений: 5

Много одинаковых форм используются на лендинге, где почти через блок отправка заявки. Не сработал данный метод, перебрасывает на форму выше при заполнении. Всем формам прописал класс form.
Ответить с цитированием
  #4 (permalink)  
Старый 04.05.2016, 17:19
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Что-то с трудом вяжется куча форм со понятием лендинга. )

Сообщение от uran2282
Не сработал данный метод
Какой метод - document.querySelectoor('form').addEventListener?

Это установка на одну форму, а на несколько, нужно сперва получить формы, обойти циклом, и на каждую из них повесить обработчик.

[].slice.call(document.querySelectorAll('form')).forEach(function(f) { 
    f.addEventListener('submit', function(e) {
        e.preventDefault();
        .....
        http.send("nameFF=" + this.nameFF.value + "&messageFF=" + this.messageFF.value);
        ...

Последний раз редактировалось laimas, 04.05.2016 в 17:21.
Ответить с цитированием
  #5 (permalink)  
Старый 04.05.2016, 17:37
Новичок на форуме
Отправить личное сообщение для uran2282 Посмотреть профиль Найти все сообщения от uran2282
 
Регистрация: 29.04.2016
Сообщений: 5

Вот к примеру зачем использовать много форм. http://partners-work.com/4/ для такого вот дизайна. Мои знания в скриптах очень скудны. Не могли бы вы расписать как именно должна выглядеть вся структура ?
Ответить с цитированием
  #6 (permalink)  
Старый 04.05.2016, 20:11
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Лендинг, это в общем то выжимка самой соли, чтобы привлечь, а по ссылке что-то ближе к одностраничному сайту, много форм, действий. Но я же не говорю что нельзя, да на здоровье. )

У вас подключается jQuery, поэтому можно упростить все:

1) В теле страницы, внизу, подключается скрипт, тот что до вашей попытки отправки форм. Его содержание следующее:

$(function() {
    $('#dg-container').gallery({
	autoplay	:	true
    });
});


Перепишите его так:

$(function() {
    $('#dg-container').gallery({
	autoplay	:	true
    });

    $('form').submit(function(e) {
        e.preventDefault();
        var f = this; //это текущая форма
        $.ajax(
            type: "POST",
            url: "contacts.php", //если скрипт обработчик один у всех форм, иначе лучше получать это из action формы
            data: $(this).serialize(),
            success: function(q){
                alert(q + ', Ваше сообщение получено.\nНаши специалисты ответят Вам в течении 2-х дней.\nБлагодарим за интерес к нашей фирме!');
                //Это убрать
                //f.messageFF.removeAttribute('value'); //value - это свойство, 
                //f.messageFF.value='';
                //очистить форму, это так
                f.reset();
            } 
        );
    });
});


Только не понятно зачем очищать поля формы, к тому же только одного messageFF, да и к сообщению оно как-то не подходит. Не понятно каким же образом сервер будет понимать что за форма пришла, ведь есть отправка одних и тех же данных, но для: Заказать замер, Заказать услугу, Оформить заявку.


2) Скрипт в котором document.getElementById('feedback-form_1').addEventListener('submit', function(evt){.... - удалить.


PS. Разница по Гринвичу будет возвращаться для времени сервера, а не клиента, так что смысла особого в ней нет.

Последний раз редактировалось laimas, 04.05.2016 в 20:30.
Ответить с цитированием
  #7 (permalink)  
Старый 04.05.2016, 22:51
Новичок на форуме
Отправить личное сообщение для uran2282 Посмотреть профиль Найти все сообщения от uran2282
 
Регистрация: 29.04.2016
Сообщений: 5

Сделал по вашему примеру, по той же ссылке, все равно при заполнении и и клику по кнопке отправить перекидывает на другую форму((( что за беда такая...
Ответить с цитированием
  #8 (permalink)  
Старый 05.05.2016, 01:26
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

У вас кнопки отправки форм вне тега формы расположены.
Ответить с цитированием
  #9 (permalink)  
Старый 05.05.2016, 05:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990


А это то зачем перенесено в код?

//Это убрать
//f.messageFF.removeAttribute('value'); //value - это свойство, 
//f.messageFF.value='';
//очистить форму, это так


Странные однако у вас формы. )
Ответить с цитированием
  #10 (permalink)  
Старый 05.05.2016, 17:34
Новичок на форуме
Отправить личное сообщение для uran2282 Посмотреть профиль Найти все сообщения от uran2282
 
Регистрация: 29.04.2016
Сообщений: 5

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


http://partners-work.com/10/

Последний раз редактировалось uran2282, 05.05.2016 в 17:42.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несколько одинаковых форм обратной связи на одной странице stalex jQuery 14 24.04.2018 17:25
Создать несколько одинаковых элементов dulingleb Общие вопросы Javascript 3 29.06.2014 21:17
Поместить значения в несколько форм $wAiN_n Общие вопросы Javascript 2 26.10.2012 19:48
Несколько форм с одним классом + submit klev2004 Общие вопросы Javascript 8 09.07.2012 15:41
Несколько одинаковых таблиц. Обращение к отдельным элементам в них. zaytsewa Элементы интерфейса 7 11.11.2010 09:08