无法在打开的jQuery UI对话框中更新单个元素?

时间:2010-10-13 21:08:57

标签: jquery jquery-ui

我正在创建一个对话框来显示长时间运行的进程的状态。基本上,我想创建对话框,并在长时间运行的进程执行时更新内容。我仍然是jQuery / jQuery UI的新手,所以我可能做了一些愚蠢的事,但我不明白为什么以下不起作用:


function updateStatus() {
    $('#status').html("Interval status!");
    $('#message').html("message status!");
}
...
   var $updateDialog = $('<div id="updateDialog"></div>')
        .html('<table><tr><td id="status">Status goes here ...</td></tr> <tr><td> </td></tr> <tr><td id="message">Message goes here ...</td></tr> </table>')
        .dialog({
            title: 'Update Progress',
            modal: 'true',
            buttons: { "OK" : function() { 
                                  $(this).dialog("close");
                                  clearInterval(interval);
                              }
                     }
        });
        interval = setInterval(updateStatus, 1000);

当调用updateStatus时,我希望看到&lt; td&gt;元素已更新为新值,但内容未更改。如果我执行类似$('#status')。html()的操作并将其写入控制台,则表明 已更改;但是在对话框中看不到变化。

但是,如果我完全替换对话框的整个html(),则对话框的内容可见。


    $('#updateDialog').html('<table><tr><td id="status">Interval Status ...</td></tr> <tr><td> </td></tr> <tr><td id="message">Interval message ...</td></tr> </table>')

如果可以的话,我宁愿使用更多“外科手术”的方法更新个别元素。有人能告诉我我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:1)

这是因为您实际上并未将TABLE添加到DOM。你将它添加为DIV的html(),我认为它不是真的相同。一旦你创建了你的div,你应该将它附加到DOM(例如$('body')。append(whatever))然后你应该以相同的方式将你的表附加到'what'。

然后它应该工作。