在继续使用其他功能之前,如何完全完成一项功能?

时间:2011-08-17 11:10:01

标签: javascript jquery callback

虽然我可以找到有关如何重定向网页的帮助,但我找不到符合我情况的网页。

我想在重定向到表单的'action'链接之前淡出弹出窗口 - 里面有一个表单。

我在单独的函数中有fadeout,因为该函数更复杂并且被调用次数。

我的jquery代码:

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

    });

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

1 个答案:

答案 0 :(得分:5)

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不是严格类型的语言,你不能确定这个函数有正确的签名,但是那不在那个问题上。)

如果您完全确定自己总是会通过callbackundefined并且您懒得输入少于20个字符,则可以将if (typeof(callback) =='function')简化为if (callback) 。它将检查您是否已通过某事。但这不是一个好习惯(但很受欢迎)。 :)

更新2:函数的 length属性返回其参数的数量。见MDN