2011-09-16 69 views
0

在我的模态JQuery对话框中单击按钮后,我想更新对话框中的html以显示文本和图像,指示正在进行工作(微调等)。当我在下面的例子中,html不会更新。就好像该代码从不执行,或执行得太晚以至于更改不可见。但是,如果我取消注意警报('嘿');代码,它的确如此。什么是实现我以后的好方法?JQuery模式对话框HTML不更新

$dialog.dialog("option", "title", 'Do lengthy work'); 
$dialog.dialog("option", "buttons", { 

    "Cancel": function() { $(this).dialog("close"); }, 
    "Start Work": function() { 

     $(this).html('Working...<p/><img src="http://mydomain.com/progress.gif"'); 
     //alert('hey'); 
     doLengthyWorkFunction(); 
     $(this).dialog('close'); 
    } 
}); 
$dialog.html('Click the Start Work button to begin.'); 
$dialog.dialog('open'); 

回答

0

一个setTimeout()通话将释放系统更新显示:

$dialog.dialog("option", "buttons", { 

    "Cancel": function() { $(this).dialog("close"); }, 
    "Start Work": function() { 

     $(this).html('Working...<p/><img src="http://mydomain.com/progress.gif"'); 
     setTimeout(function() { 
      doLengthyWorkFunction(); 
      $(this).dialog('close'); 
      }, 
      0 
     ); 
    } 
}); 
+0

我不确定,但在点击处理程序中使用时不会$(this)是按钮元素吗? – wgcrouch

0

我不知道你的doLengthyWorkFunction做什么,但如果它使一个Ajax请求,那么工作正在异步完成,并因此实际致电$.get$.post或其他任何正在完成即时。

如果是这样的话,那么你会希望对话框关闭代码发生在ajax成功函数中,而不是对话框按钮单击事件。