2011-08-17 68 views
1

虽然我能找到如何重定向页面的帮助,但我无法找到一个这将符合我的情况。如何在完成一项功能之前完成其他功能?

我想淡出弹出 - 重定向到表单的“动作”链接之前 - 这里面有它的形式。

我在单独的函数的淡出作为功能较为复杂,且是通过次数调用。

我jQuery代码:

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

    }); 

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

你有你的代码的方式,页面会刷新。如果您关闭模式框,则无关紧要,如果表单提交给自己,它仍会回到原来的状态。我不明白你为什么要这么做。 – Shef 2011-08-17 11:14:33

+0

我做到了,因为我想在重定向页面之前淡出弹出窗口。 – maan81 2011-08-17 11:57:11

回答

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