【问题标题】:Settimeout() not working synchronuslySettimeout() 不能同步工作
【发布时间】:2017-03-28 19:13:32
【问题描述】:

我有一个带有提交按钮的页面。单击提交按钮时,我需要显示一个带有一些通知消息的对话框 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";
    });

这不起作用。

【问题讨论】:

  • 您是否在表单上提交return falseevent.preventDefault()

标签: jquery settimeout jquery-ui-dialog


【解决方案1】:

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);

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

【讨论】:

    【解决方案2】:

    如果您正在重定向到另一个页面,则无需关闭对话框,但我想如果需要 timt 从服务器获得响应是有道理的。无论如何:

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

    【讨论】:

      【解决方案3】:

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

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

      dialog widget documentation

      【讨论】:

        猜你喜欢
        • 2010-09-13
        • 1970-01-01
        • 2021-11-08
        • 2013-01-07
        • 2016-11-23
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 2017-02-06
        相关资源
        最近更新 更多