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 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
обработчик начинается и кончается в указанных строках, их и надо удалить из кода.

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


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