Settimeout()无法同步工作

时间:2017-03-28 11:07:45

标签: jquery settimeout jquery-ui-dialog

我有一个带有提交按钮的页面。当点击提交按钮时,我需要显示一个包含2秒通知消息的对话框.2秒后,我需要将页面重定向到另一个位置。

setTimeout(function(){
       $('#wrapper_dialog').dialog('close');                
                                }, 2000);
//after this popup closes,I need to redirect to another page
 window.location = "?load=parents/communication";

当我这样做时,会出现对话框,并且页面会异步进入下一页。

setTimeout(function(){
$('#wrapper_dialog').dialog('close');}, 2000).then(function(){
    window.location = "?load=parents/communication";
    });

这不起作用。

3 个答案:

答案 0 :(得分:2)

setTimeout没有返回承诺,它会返回一个数字;因此,它上面没有then功能。

在调用之后,只需将location分配关闭对话框 setTimeout回调:

setTimeout(function(){
    $('#wrapper_dialog').dialog('close');                
    window.location = "?load=parents/communication";
}, 2000);

或者,如果关闭对话框中有动画,请将location作业放在对话框的close event中:

setTimeout(function(){
    $('#wrapper_dialog').dialog('close').on("dialogclose", function() {
        window.location = "?load=parents/communication";
    });                
}, 2000);

等待更改位置直到动画完成。

答案 1 :(得分:1)

如果您要重定向到另一个页面,则无需关闭对话框,但我想如果从服务器获取响应需要时间,这是有意义的。无论如何:

setTimeout(function(){ 
    $('#wrapper_dialog').dialog('close');
    window.location = "?load=parents/communication";
},2000);

答案 2 :(得分:0)

您需要将关闭事件处理程序传递给对话框:

setTimeout(function(){
    $('#wrapper_dialog').dialog('close');
    $( "#wrapper_dialog" ).on( "dialogclose", function() {
        window.location = "?load=parents/communication";
    });
}, 2000);

请参阅dialog widget documentation