Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Ajax форма обратной связи ломает поиск по сайту (https://javascript.ru/forum/misc/78556-ajax-forma-obratnojj-svyazi-lomaet-poisk-po-sajjtu.html)

frost68 03.10.2019 11:48

Ajax форма обратной связи ломает поиск по сайту
 
Здравствуйте, вот код js формы:
$(document).ready(function () {
    $("form").submit(function () {
       
        var formID = $(this).attr('id');

        
        var formNm = $('#' + formID);
        $.ajax({
            type: "POST",
            url: 'modalform/mail.php',
            data: formNm.serialize(),
            success: function (data) {
              
              $('.msgs').html(data);
              $('.formTitle').css("display","none");
              $(formNm).css("display","none");
              setTimeout(function(){
                $(formNm).css("display","block");
                $('.formTitle').css("display","block");
                $('.msgs').html('');
                $('input').not(':input[type=submit], :input[type=hidden]').val('');
              }, 3000);
            },
            error: function (jqXHR, text, error) {
               
                $('.msgs').html(error);
                $('.formTitle').css("display","none");
                $(formNm).css("display","none");
                setTimeout(function(){
                  $(formNm).css("display","block");
                  $('.formTitle').css("display","block");
                  $('.msgs').html('');
                  $('input').not(':input[type=submit], :input[type=hidden]').val('');
                }, 3000);
            }
        });
        return false;
    });
    
      var $input = $('.form-fieldset > input');
      $input.blur(function (e) {
        $(this).toggleClass('filled', !!$(this).val());
      });
});

Вот сама форма:
<div class="remodal" data-remodal-id="firstModal" data-remodal-options="hashTracking: false,closeOnConfirm: false">
     
  <button data-remodal-action="close" class="remodal-close"></button>
  <div class="formArea">
    <p class="formTitle">Запись через сайт является предварительной. Наш сотрудник свяжется с Вами для подтверждения записи к специалисту.<br/>Поля помеченные <span style="color:red;">*</span> обязательны для заполнения.</p>
    <p class="msgs"></p>
    <form id="firstForm" class="form" autocomplete="off">
      <fieldset class="form-fieldset ui-input __first">
    <label for="username">
          <span data-text="Введите ваше Ф.И.О.:">Введите ваше Ф.И.О.<span style="color:red;">*</span>:</span>
        </label>        
<input name="uname" type="text" id="username" required="required" placeholder="Введите ваше Ф.И.О." tabindex="0" />
    
      </fieldset>
 <fieldset class="form-fieldset ui-input __first">
<label for="userphone">
          <span data-text="Введите ваш телефон*:">Введите ваш телефон<span style="color:red;">*</span>:</span>
        </label>        
<input name="uphone" type="tel" class="plugin__input plugin__input_jmp" required="required" placeholder="+7" maxlength="16" id="userphone" tabindex="0" />
      </fieldset>
 <fieldset class="form-fieldset ui-input __first">
<label for="staff">
          <span data-text="Специалист:">Специалист:</span>
        </label>        
<input name="ustaff" type="text" class="staff" id="userstaff" tabindex="0" value="" readonly="readonly"/>
      </fieldset>
     <fieldset class="form-fieldset ui-input __first">
<label for="email">
          <span data-text="Комментарии:">Комментарии:</span>
        </label>
<textarea name="uemail" id="email" tabindex="0" placeholder="Комментарии">
</textarea>
      </fieldset>
      <input name="formInfo" class="formInfo" type="hidden" value="Новая запись к врачу"/>
      <!-- DIV - в котором выводится блок с recaptcha -->
      <div class="g-recaptcha" data-sitekey="6Lem2bgUAAAAAOX74cFg_9nCwhQIGmaVe3kySNPY" data-theme="light"></div>
      <div class="form-footer">
        <input type="submit" class="formBtn" value="Отправить заявку" />
<label class="custom-control-label" for="customCheck">Нажимая кнопку, я принимаю условия <a href="/page/politika_konfidencialnosti.html">Пользовательского соглашения</a> и даю своё согласие на обработку моих персональных данных, в соответствии с Федеральным законом от 27.07.2006 года 152-ФЗ «О персональных данных».</label>
      </div>
     
    </form>
  </div>
</div>


а вот поиск:
<div class="form-group">
                            <form id="search_form" action="/search/" role="search" method="post" class="footer-search-form">
                                <input class="form-search-footer form-control input-lg" name="words" maxlength="50"  placeholder="{Поиск}..." required="" type="search" data-trigger="manual" data-container="body" data-toggle="popover" data-placement="bottom" data-html="true"  data-content="">
                                <button class="footer-search-button" type="submit">
                                    <i class="fa fa-search" aria-hidden="true"></i>
                                </button>
                            </form>
                        </div>


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

laimas 03.10.2019 13:16

$("form").submit(function... - это объявление обработчика для всех форм, включая и форму поиска, а это modalform/mail.php обработчик чего?

А это

var formID = $(this).attr('id');
var formNm = $('#' + formID);

как понять?

frost68 03.10.2019 13:18

Цитата:

Сообщение от laimas (Сообщение 513410)
$("form").submit(function... - это объявление обработчика для всех форм, включая и форму поиска, а это modalform/mail.php обработчик чего?

Это обработчик почты, вот код
<?php
error_reporting(0);
require_once __DIR__ . '/recaptchalib.php';
// Введите свой секретный ключ
$secret = "";
// пустой ответ каптчи
$response = null;
// Проверка вашего секретного ключа
$reCaptcha = new ReCaptcha($secret);
if ($_POST["g-recaptcha-response"]) {
$response = $reCaptcha->verifyResponse(
        $_SERVER["REMOTE_ADDR"],
        $_POST["g-recaptcha-response"]
    );
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST['uname']) && (empty($_POST['uphone']))){
    echo '<p class="fail">Ошибка. Вы заполнили не все обязательные поля!</p>';
  } else {
    if ($response != null && $response->success) {
    if (isset($_POST['uname'])) {
      $uname = strip_tags($_POST['uname']);
      $unameFieldset = "<b>Ф.И.О.:</b>";
    }
    if (isset($_POST['uemail'])) {
      $uemail = strip_tags($_POST['uemail']);
      $uemailFieldset = "<b>Комментарий:</b>";
    }
    if (isset($_POST['uphone'])) {
      $uphone = strip_tags($_POST['uphone']);
      $uphoneFieldset = "<b>Телефон:</b>";
    }
     if (isset($_POST['formInfo'])) {
      $formInfo = strip_tags($_POST['formInfo']);
      $formInfoFieldset = "<b>Запись к специалисту:</b>";
    }
    if (isset($_POST['ustaff'])) {
      $ustaff = strip_tags($_POST['ustaff']);
      $ustaffFieldset = "<b>Специалист:</b>";
    }

    $to = ""; /*Укажите адрес, на который должно приходить письмо*/
    $sendfrom = ""; /*Укажите адрес, с которого будет приходить письмо, можно не настоящий, нужно для формирования заголовка письма*/
    $headers  = "From: " . strip_tags($sendfrom) . "\r\n";
    $headers .= "Reply-To: ". strip_tags($sendfrom) . "\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html;charset=utf-8 \r\n";
    $headers .= "Content-Transfer-Encoding: 8bit \r\n";
    $subject = "$formInfo: $ustaff";
    $message = "$unameFieldset $uname<br>
                $uphoneFieldset $uphone<br>
                $ustaffFieldset $ustaff<br>
                $uemailFieldset $uemail";

    $send = mail ($to, $subject, $message, $headers);
        if ($send == 'true') {
            echo '<p class="success">Спасибо за отправку вашего сообщения!</p>';
        } else {
          echo '<p class="fail"><b>Ошибка. Сообщение не отправлено!</b></p>';
        }
    } else {
      echo '<p class="success">Не пройдена каптча! Попробуйте еще раз!</p>';
    }
  }
} else {
  header ("Location: http:///"); // главная страница вашего лендинга
}

laimas 03.10.2019 13:19

Цитата:

Сообщение от frost68
Это обработчик почты

А каким боком к почте имеет отношение поиск?

frost68 03.10.2019 13:20

Значит мне нужно как то заставить его не трогать поиск? Или обрабатывать только форму?

frost68 03.10.2019 13:21

я так думаю это из-за того что в форме связи и поиск работают через form

laimas 03.10.2019 13:30

Цитата:

Сообщение от frost68
Значит мне нужно как то заставить его не трогать поиск?

Вам надо исключить бардак к вашем коде. К примеру, есть две формы, которые вы хотите отправить на сервер одним обработчиком, при этом серверные обработчики имеют разные адреса. Сделать это не сложно, так как и у вас, повесив обработчик на селектор "form". Если формы в action будут хранить эти адреса, то их передать в $.ajax не сложно, вот так: url: this.action.

Но ведь и ответ будет принимать тот же обработчик, а на каждый запрос (отправление формы) будет свой ответ сервера. А значит функция success должна знать либо какая форма стала источником запроса, либо по признаку в ответе севера понять что за ответ пришел и что с ним делать.

А у вас какой-то бардак с ID, и валится все по одному адресу.

frost68 03.10.2019 13:35

id у форм разные, type тоже, подскажите пожалуйста как сделать чтобы обработчик из темы работал только с формой у которой id="firstform".Я неопытный в этом вопросе

laimas 03.10.2019 13:49

Цитата:

Сообщение от frost68
id у форм разные

А нафига они вообще нужны? Вы логику того что у вас с ними написано понимаете или нет?

var formID = $(this).attr('id'); - this, это форма источник, то есть так которая отправляется и проще так this.id. А значит $('#' + formID) это тоже самое что и $(this). К чему это бесполезная писанина?

А далее вы отсылаете запросы от всех своих форм на один адрес. И о каком типе разном речь, методе, так он у вас жестко указан type: "POST".

У вас много ошибок как на клиенте, так и на сервере. К примеру, вот это пустяк if(empty($_POST['uname']) ..., но баг весьма неприятный, так как достаточно передать на сервер просто один пробел, и поле будет считаться не пустым.

Если вам сложно разобраться, то сделайте два разных обработчика, то есть не $("form").submit(function ..., а $("ID формы связи").submit(function () ... и $("ID формы поиска").submit(function () ... где и действуйте согласно задачам. Вот только нужно отменять действие по умолчанию (отправление формы естественным образом) таким образом в обработчиках:

....submit(function (e) {
e.prevetDefault();
....

PS. Пропустил return false;, это тоже самое что e.prevetDefault();, так что тут все норм.

laimas 03.10.2019 13:53

Если же форма поиска отправляется не AJAX, то у вас будет всего один обработчик для формы связи как $("ID формы связи").submit(function (e) ... и мешать форме поиска он не будет. В обработчике форма как JQ объект это $(this), а "магию" с ID из кода выбросить.

frost68 03.10.2019 14:01

$(document).ready(function () {
    $("#firstform").submit(function (e) {
        e.preventDefault();
        // Получение ID формы
        var formID = $(this).attr('id');

        // Добавление решётки к имени ID
        var formNm = $('#' + formID);
        $.ajax({
            type: "POST",
            url: 'modalform/mail.php',
            data: formNm.serialize(),
            success: function (data) {
              // Вывод сообщения об успешной отправке
              $('.msgs').html(data);
              $('.formTitle').css("display","none");
              $(formNm).css("display","none");
              setTimeout(function(){
                $(formNm).css("display","block");
                $('.formTitle').css("display","block");
                $('.msgs').html('');
                $('input').not(':input[type=submit], :input[type=hidden]').val('');
              }, 3000);
            },
            error: function (jqXHR, text, error) {
                // Вывод сообщения об ошибке отправки
                $('.msgs').html(error);
                $('.formTitle').css("display","none");
                $(formNm).css("display","none");
                setTimeout(function(){
                  $(formNm).css("display","block");
                  $('.formTitle').css("display","block");
                  $('.msgs').html('');
                  $('input').not(':input[type=submit], :input[type=hidden]').val('');
                }, 3000);
            }
        });
        return false;
    });
    //для стилей формы
      var $input = $('.form-fieldset > input');
      $input.blur(function (e) {
        $(this).toggleClass('filled', !!$(this).val());
      });
});

frost68 03.10.2019 14:02

Так? Если я верно сделал, то не работает

frost68 03.10.2019 14:06

Цитата:

Сообщение от laimas (Сообщение 513417)
А нафига они вообще нужны? Вы логику того что у вас с ними написано понимаете или нет?

var formID = $(this).attr('id'); - this, это форма источник, то есть так которая отправляется и проще так this.id. А значит $('#' + formID) это тоже самое что и $(this). К чему это бесполезная писанина?

А далее вы отсылаете запросы от всех своих форм на один адрес. И о каком типе разном речь, методе, так он у вас жестко указан type: "POST".

У вас много ошибок как на клиенте, так и на сервере. К примеру, вот это пустяк if(empty($_POST['uname']) ..., но баг весьма неприятный, так как достаточно передать на сервер просто один пробел, и поле будет считаться не пустым.

Если вам сложно разобраться, то сделайте два разных обработчика, то есть не $("form").submit(function ..., а $("ID формы связи").submit(function () ... и $("ID формы поиска").submit(function () ... где и действуйте согласно задачам. Вот только нужно отменять действие по умолчанию (отправление формы естественным образом) таким образом в обработчиках:

....submit(function (e) {
e.prevetDefault();
....

PS. Пропустил return false;, это тоже самое что e.prevetDefault();, так что тут все норм.

Я здесь ошибся, не type а method, думал к этому можно привязаться

frost68 03.10.2019 14:20

Вот код для поиска и для формы
//ajax форма
$(document).ready(function () {
    $("#firstform").on('submit', function(){
        // Получение ID формы
        var formID = $(this).attr('id');

        // Добавление решётки к имени ID
        var formNm = $('#' + formID);
        $.ajax({
            type: "POST",
            url: 'modalform/mail.php',
            data: formNm.serialize(),
            success: function (data) {
              // Вывод сообщения об успешной отправке
              $('.msgs').html(data);
              $('.formTitle').css("display","none");
              $(formNm).css("display","none");
              setTimeout(function(){
                $(formNm).css("display","block");
                $('.formTitle').css("display","block");
                $('.msgs').html('');
                $('input').not(':input[type=submit], :input[type=hidden]').val('');
              }, 3000);
            },
            error: function (jqXHR, text, error) {
                // Вывод сообщения об ошибке отправки
                $('.msgs').html(error);
                $('.formTitle').css("display","none");
                $(formNm).css("display","none");
                setTimeout(function(){
                  $(formNm).css("display","block");
                  $('.formTitle').css("display","block");
                  $('.msgs').html('');
                  $('input').not(':input[type=submit], :input[type=hidden]').val('');
                }, 3000);
            }
        });
        return false;
    });
    //для стилей формы
      var $input = $('.form-fieldset > input');
      $input.blur(function (e) {
        $(this).toggleClass('filled', !!$(this).val());
      });
});

    // Ajax поиск
    $("#search").on('input', function() {
        var words = $(this).val();
        if (words.length > 2) {
            $.ajax({
                type: "POST",
                url: ROOT_PATH + "/search/",
                data: {
                    words: escape(words + ' ' + auto_layout_keyboard(words)),
                    set: 2,
                    ajax: true
                },
                success: function(data)
                {

                    // Результат поиска
                    if (data != 'false') {

                        if (data != $("#search").attr('data-content')) {
                            $("#search").attr('data-content', data);

                            $("#search").popover('show');
                        }
                    } else
                        $("#search").popover('hide');
                }
            });
        }
        else {
            $("#search").attr('data-content', '');
            $("#search").popover('hide');
        }
    });

frost68 03.10.2019 14:23

Цитата:

Сообщение от laimas (Сообщение 513418)
Если же форма поиска отправляется не AJAX, то у вас будет всего один обработчик для формы связи как $("ID формы связи").submit(function (e) ... и мешать форме поиска он не будет. В обработчике форма как JQ объект это $(this), а "магию" с ID из кода выбросить.

Поиск Ajax

laimas 03.10.2019 14:34

В запросе формы поиска тоже нужно запрещать действие по умолчанию, то есть либо return false;, либо как писал выше.

frost68 03.10.2019 14:43

laimas,
Вот так сделал, поиск работает форма нет
//ajax форма
$(document).ready(function () {
     $("#firstform").submit(function(){
        // Получение ID формы
        var formID = $(this).attr('id');

        // Добавление решётки к имени ID
        var formNm = $('#' + formID);
        $.ajax({
            type: "POST",
            url: 'modalform/mail.php',
            data: formNm.serialize(),
            success: function (data) {
              // Вывод сообщения об успешной отправке
              $('.msgs').html(data);
              $('.formTitle').css("display","none");
              $(formNm).css("display","none");
              setTimeout(function(){
                $(formNm).css("display","block");
                $('.formTitle').css("display","block");
                $('.msgs').html('');
                $('input').not(':input[type=submit], :input[type=hidden]').val('');
              }, 3000);
            },
            error: function (jqXHR, text, error) {
                // Вывод сообщения об ошибке отправки
                $('.msgs').html(error);
                $('.formTitle').css("display","none");
                $(formNm).css("display","none");
                setTimeout(function(){
                  $(formNm).css("display","block");
                  $('.formTitle').css("display","block");
                  $('.msgs').html('');
                  $('input').not(':input[type=submit], :input[type=hidden]').val('');
                }, 3000);
            }
        });
        return false;
    });
    //для стилей формы
      var $input = $('.form-fieldset > input');
      $input.blur(function (e) {
        $(this).toggleClass('filled', !!$(this).val());
      });
});

    // Ajax поиск
    $("#search").on('input', function() {
        var words = $(this).val();
        if (words.length > 2) {
            $.ajax({
                type: "POST",
                url: ROOT_PATH + "/search/",
                data: {
                    words: escape(words + ' ' + auto_layout_keyboard(words)),
                    set: 2,
                    ajax: true
                },
                success: function(data)
                {

                    // Результат поиска
                    if (data != 'false') {

                        if (data != $("#search").attr('data-content')) {
                            $("#search").attr('data-content', data);

                            $("#search").popover('show');
                        }
                    } else
                        $("#search").popover('hide');
                }
            });
        }
        else {
            $("#search").attr('data-content', '');
            $("#search").popover('hide');
        }
        return false;
    });

laimas 03.10.2019 15:01

Цитата:

Сообщение от frost68
форма нет

Цитата:

Сообщение от frost68
// Получение ID формы
        var formID = $(this).attr('id');
 
        // Добавление решётки к имени ID
        var formNm = $('#' + formID);

Это в помойку, я же писал выше.

$("#firstform").submit(function(){
        // Получение форму
        var form = $(this);

        $.ajax({
            type: "POST",
            url: 'modalform/mail.php',
            data: form.serialize(),
            success: function (data) {
              // Вывод сообщения об успешной отправке
              $('.msgs').html(data);
              $('.formTitle').hide();
              form.hide();
              setTimeout(function(){
                form.show();
                $('.formTitle').show();
                $('.msgs').html('');
                $('input').not(':input[type=submit], :input[type=hidden]').val('');
              }, 3000);
            },
            error: function (jqXHR, text, error) {
                // Вывод сообщения об ошибке отправки
                $('.msgs').html(error);
                $('.formTitle').hide(;
                form.hide();
                setTimeout(function(){
                  form.show();
                  $('.formTitle').show();
                  $('.msgs').html('');
                  $('input').not(':input[type=submit], :input[type=hidden]').val('');
                }, 3000);
            }
        });
        return false;
    });


Что именно не работает?

В форме поиска:

$("#search").on('input', function() {
        var f = $(this),  words = this.value.trim();
        if (words.length > 2) {
            $.ajax({
                type: "POST",
                url: ROOT_PATH + "/search/",
                data: {
                    words: escape(words + ' ' + auto_layout_keyboard(words)),
                    set: 2,
                    ajax: true
                },
                success: function(data)
                {
 
                    // Результат поиска
                    if (data != 'false') {
 
                        if (data != f.attr('data-content')) {
                            f.attr('data-content', data).popover('show');
                        }
                    } else f.popover('hide');
                }
            });
        }
        else f.attr('data-content', '').popover('hide');
        
        return false;
    });

frost68 03.10.2019 15:05

laimas,
Вставил, то что вы прислали, поиск работает, форма нет

laimas 03.10.2019 15:52

Цитата:

Сообщение от frost68
поиск работает, форма нет

Если скрипт отправки формы находится в файле form.js, то проблема в нем, для него указан неверный путь, ошибка "файл не найден", статус 404.

frost68 03.10.2019 15:56

Там бы код обработки формы отправки сообщения, я его перенес в общий, а файл не отключил пока

laimas 03.10.2019 16:11

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

frost68 03.10.2019 16:16

laimas,
/phpshop/templates/puls/js/phpshop.js
нужный код начинается со строки 947

laimas 03.10.2019 16:34

Удалите строки 949 и 990, ибо вы впихнули в $(document).ready(function () второй $(document).ready(function () в котором обработчик формы.

В этом же файле строки 150-153 не могут работать вне $(document).ready(function () { ....

laimas 03.10.2019 16:43

И перепишите обработчик так:

$("#firstform").submit(function(){
        // Получение форму
        var form = $(this), msg = $('.msgs') bx = form.add($('.formTitle'));

        $.ajax({
            type: "POST",
            url: 'modalform/mail.php',
            data: form.serialize(),
            success: function (data) {
              // Вывод сообщения об успешной отправке
              msg.html(data);
              bx.hide();
              setTimeout(function(){
                bx.show();
                msg.empty();
                $('input').not(':input[type=submit], :input[type=hidden]').val('');
              }, 3000);
            },
            error: function (jqXHR, text, error) {
                // Вывод сообщения об ошибке отправки
                msg.html(error);
                bx.hide();
                setTimeout(function(){
                  bx.show();
                  msg.empty();
                  $('input').not(':input[type=submit], :input[type=hidden]').val('');
                }, 3000);
            }
        });
        return false;
    });


негоже многократно получать объекты.

frost68 03.10.2019 17:04

laimas,
Удалил строки, форма не заработала, затем заменил на ваш код, и пропало меню перестла работать форма

frost68 03.10.2019 17:06

laimas,
Также перестали добавляться имена врачей

frost68 03.10.2019 17:08

имена добавлялись так
<script type="text/javascript">
$(".linkButton").click(function() {
    $( "input[name*='formInfo']" ).val($(this).attr( "title" ));
});

</script>

laimas 03.10.2019 17:21

Пояснение: обработчик события можно установить элементу тогда, когда он будет доступен, а это может быть только после того как будет загружена страница и сформирован DOM. Когда страница загружена, то возникает событие загрузки документа, в jQuery это можно прописать двумя способами:

//так
$(document).ready(function() {
   //здесь объявляется установка обработчиков и прочие действия с элементами страницы
});
//или так
$(function() {
   //здесь объявляется установка обработчиков и прочие действия с элементами страницы    
});


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

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

Второе: если ваша форма не присутствует на странице, появляется динамически на ней, то обработчик ее события нужно делегировать, или же определять после того как форма будет добавлена на страницу.

laimas 03.10.2019 17:29

Цитата:

Сообщение от laimas
обработчик начинается и кончается в указанных строках, их и надо удалить из кода.

То есть эти две строки, а не то что заключено между ними! Надеюсь это понятно?

frost68 03.10.2019 17:31

laimas,
Вставил обработчик в отдельный файл и подключил его после формы
верный код?
$(document).ready(function() {
$("#firstform").submit(function(){
        // Получение форму
        var form = $(this), msg = $('.msgs') bx = form.add($('.formTitle'));
 
        $.ajax({
            type: "POST",
            url: 'modalform/mail.php',
            data: form.serialize(),
            success: function (data) {
              // Вывод сообщения об успешной отправке
              msg.html(data);
              bx.hide();
              setTimeout(function(){
                bx.show();
                msg.empty();
                $('input').not(':input[type=submit], :input[type=hidden]').val('');
              }, 3000);
            },
            error: function (jqXHR, text, error) {
                // Вывод сообщения об ошибке отправки
                msg.html(error);
                bx.hide();
                setTimeout(function(){
                  bx.show();
                  msg.empty();
                  $('input').not(':input[type=submit], :input[type=hidden]').val('');
                }, 3000);
            }
        });
        return false;
    });
});

    //для стилей формы
      var $input = $('.form-fieldset > input');
      $input.blur(function (e) {
        $(this).toggleClass('filled', !!$(this).val());
    
});

форма также не работает и редактор ругается на 4 строку

laimas 03.10.2019 17:44

Еще раз: в файле phpshop.js обработчик загрузки документа начинается в строке 586 и заканчивается в строке 1424. Вы в любом месте между этих строк должны поместить только это(!):

$("#firstform").submit(function(){
        // Получение форму
        var form = $(this), msg = $('.msgs') bx = form.add($('.formTitle'));
 
        $.ajax({
            type: "POST",
            url: 'modalform/mail.php',
            data: form.serialize(),
            success: function (data) {
              // Вывод сообщения об успешной отправке
              msg.html(data);
              bx.hide();
              setTimeout(function(){
                bx.show();
                msg.empty();
                $('input').not(':input[type=submit], :input[type=hidden]').val('');
              }, 3000);
            },
            error: function (jqXHR, text, error) {
                // Вывод сообщения об ошибке отправки
                msg.html(error);
                bx.hide();
                setTimeout(function(){
                  bx.show();
                  msg.empty();
                  $('input').not(':input[type=submit], :input[type=hidden]').val('');
                }, 3000);
            }
        });
        return false;
    });


без копирования $(document).ready(function() {. Это понятно?

frost68 03.10.2019 17:48

laimas,
я убрал этот код из phpshop.js и создал отдельный файл с кодом выше, подключил его после формы файл /modalform/js/form.js

laimas 03.10.2019 17:57

Откройте отладчик браузера, в нем во вкладке сеть будете наблюдать, что по адресу http://puls.bulean.ru/modalform/libs/remodal/form.js файла не найдено, статус 404. Другого подключения файла с таким именем не видно.

laimas 03.10.2019 18:00

И зачем дважды подключается
<script type="text/javascript" async="" src="https://www.gstatic.com/recaptcha/releases/Zy-zVXWdnDW6AUZkKlojAKGe/recaptcha__ru.js"></script>?

frost68 03.10.2019 18:04

laimas,
я пропустил, извините, но в 4 строке все еще ошибка Uncaught SyntaxError: Unexpected identifier

laimas 03.10.2019 18:05

Уберите подключение form.js, замените свой phpshop.js прикрепленным файлом, в нем вставлено так, как полагается.

frost68 03.10.2019 18:06

насколько я помню при подключении капчи она не срабатывала в модальном окне если была подключена 1 раз

frost68 03.10.2019 18:06

но с этим проблем не было

laimas 03.10.2019 18:07

Цитата:

Сообщение от frost68
не могу ответить

В секции head это прописано дважды, найдите где это в шаблоне и удалите лишнее.


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