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

maa*_*n81 1 javascript jquery callback

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

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

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

我的jquery代码:

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

    });

    //hiding popup
    function hidePopup(){
        $(".popup").fadeOut("slow");
    };
Run Code Online (Sandbox Code Playgroud)

J0H*_*0HN 5

fadeOut接受回调函数作为第二个参数.完全被淘汰后,该回调即被完成.所以只需使用:

$(".popup").fadeOut("slow", function(){//Executes after faded out//});
Run Code Online (Sandbox Code Playgroud)

在你的代码中,我建议你重写你的hidePopup功能

function hidePopup(callback){
    $(".popup").fadeOut("slow",callback);
};
Run Code Online (Sandbox Code Playgroud)

并执行它

hidePopup(function(){
    window.location.href = $('form').attr('action');
});
Run Code Online (Sandbox Code Playgroud)

更新您可以使用以下代码检查是否已通过有效回调:

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

这是一个强大的检查,可以保证你已经传递了一个有效的回调(好吧,因为JS不是严格类型的语言,你不能确定这个函数有正确的签名,但那不在那个问题之内).

如果你完全确定你会永远通过callback或者undefined你懒得足够希望输入20个字符,那么你可以简化if (typeof(callback) =='function')if (callback).它会检查你是否通过了某些事情.但这不是一个好习惯(但很受欢迎).:)

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