Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Автоматическое закрытие окна FancyBox (https://javascript.ru/forum/jquery/79019-avtomaticheskoe-zakrytie-okna-fancybox.html)

maxg5 07.12.2019 13:32

Автоматическое закрытие окна FancyBox
 
Есть форма обратной связи в модальном окне FancyBox.
Нужно сделать что бы после успешной отправки заявки это модальное окно закрывалось автоматически. Я сделал закрытие через setTimeout. Но окно закрываться при нажатии на кнопку Отправить вне зависимости от того отправилась форма или нет.
Помогите пожалуйста исправить.
<script>
$(document).ready(function(){
            /*ПРОВЕРЯЕМ НАЖАТА ЛИ КНОПКА ОТПРАВКИ*/
            $('#btn_submit').click(function(){
                // собираем данные с формы
                var user_name    = $('#name').val();
                var user_email   = $('#email').val();
                var user_phone = $('#phone').val();
                var text_comment = $('#text_comment').val();
                // отправляем данные
                $.ajax({
                    url: "/php/send.php", // куда отправляем
                    type: "post", // метод передачи
                    data: { // что отправляем
                        "name":    user_name,
                        "email":   user_email,
                        "phone":   user_phone,
                        "text_comment": text_comment
                    },
                    error:function(){$("#erconts").html("Произошла ошибка!");},
                    /* если произойдет ошибка в элементе с id erconts выведится сообщение*/
                    beforeSend: function() {
                        $("#erconts").html("Отправляем данные...");
                    },
                    success: function(result){
                        /* В случае удачной обработки и отправки выполнится следующий код*/
                        $('#erconts').html(result);
                           setTimeout($.fancybox.close(), 2000);
                        console.log("ntcn");
                        
                    }
                });
            });
        });
</script>

рони 07.12.2019 13:39

Цитата:

Сообщение от maxg5
setTimeout($.fancybox.close(), 2000);

уберите скобки

maxg5 07.12.2019 13:58

Цитата:

Сообщение от рони (Сообщение 516929)
уберите скобки

Убрал скобки, но теперь модальное окно не закрывается совсем. В независимости от того отправлена заявка или нет.Получилось так:
setTimeout($.fancybox.close, 2000);

laimas 07.12.2019 14:01

Цитата:

Сообщение от maxg5
но теперь модальное окно не закрывается совсем.

По этому адресу "/php/send.php" написать sleep(5);, через 5 секунд будет закрыто, и просто так: $.fancybox.close.

рони 07.12.2019 14:12

maxg5,
может так повезёт :)
setTimeout(function() {
  $.fancybox.close()
}, 2000);

laimas 07.12.2019 14:14

рони, да у него скорее ответ приходит практически сразу, поэтому и кажется.

maxg5 07.12.2019 14:15

Так окно так же не закрывается плюс к этому идет задержка на отправку в количестве секунд указанных в sleep(). Возможно я что то не так оформил.
<?php
    /*ПОМЕЩАЕМ ДАННЫЕ ИЗ ПОЛЕЙ В ПЕРЕМЕННЫЕ*/
    $name = $_POST["name"];
    $email = $_POST["email"];
    $phone = $_POST["phone"];
    $text_comment = $_POST["text_comment"];

    /*ЗДЕСЬ ПРОВЕРЯЕМ ЕСЛИ ХОТЯ БЫ ОДНО ИЗ ПОЛЕЙ НЕ ЗАПОЛНЕНО МЫ ВОЗВРАЩАЕМ СООБЩЕНИЕ*/
    if($name=="" or $email=="" or $phone=="" or $text_comment==""){
        echo "Заполните все поля";
    }

    else{
        /*ЕСЛИ ВСЕ ПОЛЯ ЗАПОЛНЕНЫ НАЧИНАЕМ СОБИРАТЬ ДАННЫЕ ДЛЯ ОТПРАВКИ*/
        $to = "maxg5@yandex.ru"; /* Адрес, куда отправляем письма*/
        $subject = "Письмо с обратной связи"; /*Тема письма*/
        $headers = "MIME-Version: 1.0\r\n";
        $headers .= "Content-type: text/html; charset=utf-8\r\n";
        $headers .= "From: <test@mail.ru>\r\n";/*ОТ КОГО*/

        /*ВО ВНУТРЬ ПЕРЕМЕННОЙ $message ЗАПИСЫВАЕМ ДАННЫЕ ИЗ ПОЛЕЙ */
        $message .= "Имя пользователя: ".$name."\n";
        $message .= "Почта: ".$email."\n";
        $message .= "Телефон: ".$phone."\n";
        $message .= "Сообщение: ".$text_comment."\n";

        /*ДЛЯ ОТЛАДКИ ВЫ МОЖЕТЕ ПРОВЕРИТЬ ПРАВИЛЬНО ЛИ ЗАПИСАЛИCM ДАННЫЕ ИЗ ПОЛЕЙ*/

        $send = mail($to, $subject, $message, $headers);

        /*ЕСЛИ ПИСЬМО ОТПРАВЛЕНО УСПЕШНО ВЫВОДИМ СООБЩЕНИЕ*/
        if ($send == "true")
        {
            echo "Ваше сообщение отправлено. Мы ответим вам в ближайшее время.\r\n";
        }
        /*ЕСЛИ ПИСЬМО НЕ УДАЛОСЬ ОТПРАВИТЬ ВЫВОДИМ СООБЩЕНИЕ ОБ ОШИБКЕ*/
        else
        {
            echo "Не удалось отправить, попробуйте снова!";
        }
    }
sleep(3);
    ?>
<script type="text/javscript">
$.fancybox.close
</script>

maxg5 07.12.2019 14:18

setTimeout(function() {
  $.fancybox.close()
}, 2000);


Так окно закрывается в независимости от того отправилась форма или нет.

laimas 07.12.2019 14:22

Цитата:

Сообщение от maxg5
плюс к этому идет задержка на отправку в количестве секунд указанных в sleep()

Я предполагал, что ответ сразу приходит ибо "Но окно закрываться при нажатии на кнопку Отправить", поэтому и можно проверить задержкой на сервере. А теперь что не закрывается - "Так окно так же не закрывается"?

И если мне не изменяет память, то у FancyBox есть свой метод Ajax.

maxg5 07.12.2019 14:25

Цитата:

Сообщение от laimas (Сообщение 516945)
Я предполагал, что ответ сразу приходит ибо "Но окно закрываться при нажатии на кнопку Отправить", поэтому и можно проверить задержкой на сервере. А теперь что не закрывается - "Так окно так же не закрывается"?

И если мне не изменяет память, то у FancyBox есть свой метод Ajax.

Как это реализовать? Можно пожалуйста пример кода.


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