Как мне полностью выполнить одну функцию, прежде чем перейти к другой функции? - PullRequest
1 голос
/ 17 августа 2011

Хотя я мог найти справку о том, как перенаправить страницы, но не смог найти ту, которая соответствовала бы моей ситуации.

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

У меня затухание в отдельной функции, так как эта функция более сложная и вызывается несколько раз.

Мой код JQuery:

    $('form').submit(function(e){
        function(e){
            hidePopup()
                    ,function(e){
            window.location.href = $('form').attr('action');
        };};

    });

    //hiding popup
    function hidePopup(){
        $(".popup").fadeOut("slow");
    };

1 Ответ

5 голосов
/ 17 августа 2011

fadeOut принимает функцию обратного вызова в качестве второго параметра.Этот обратный вызов выполняется после того, как полностью исчез.Так что просто используйте:

$(".popup").fadeOut("slow", function(){//Executes after faded out//});

В вашем коде я бы предложил вам переписать вашу hidePopup функцию

function hidePopup(callback){
    $(".popup").fadeOut("slow",callback);
};

и выполнить ее как

hidePopup(function(){
    window.location.href = $('form').attr('action');
});

Обновление Вы можете проверить, передали ли вы действительный обратный вызов, с помощью следующего кода:

function hidePopup(callback){
    if (typeof(callback) =='function')
        $(".popup").fadeOut("slow",callback);
    else
        $(".popup").fadeOut("slow");
};

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

Если вы абсолютно уверены, вы всегда передадите callback или undefined и вы достаточно ленивы, чтобы печатать на 20 символов меньше, вы можете упростить if (typeof(callback) =='function') до if (callback).он проверит, что вы прошли что-то .Но это не очень хорошая практика (хотя и популярная).:)

Обновление 2: length свойство функции возвращает количество ее аргументов.См MDN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...