0

我有一系列链接,当我单击链接时,我想显示一个包含详细信息的对话框。此详细信息是从 jquery ajax 请求返回的。

我正在使用下面的代码通过 ajax 将部分结果显示到 jquery 对话框中。

这是jquery代码:

$(document).ready(function() {

 $('a.click').live('click', function() {

    var url = '/Tracker/Info?id=' + $(this).attr("id");

    var dialogOpts = {
        modal: true,
        bgiframe: true,
        autoOpen: false,
        height: 600,
        width: 450,
        overlay: {
            opacity: 0.7,
            background: "black"
        },
        draggable: true,
        resizeable: true,
        open: function() {
            //display correct dialog content
            $("#dialogDiv").load(url);
        }
    };

    $("#dialogDiv").dialog(dialogOpts); //end dialog
    $("#dialogDiv").dialog("open");

});

});

这是我的控制器操作代码:

    public ActionResult Info(int id)
    {
        return PartialView("LabelPartialView", _Repository.GetItem(id));            
    }

这是问题:

当我第一次单击它时(假设我发送 id = 1234)它工作正常。
当我单击另一个项目(假设我发送 id = 4567)时,它仍然显示来自 1234 的内容。
我再次单击第二个项目(再次是 4567),然后它将显示 4567 中的内容。

有谁知道为什么它可能第一次没有刷新?这是时间问题吗?

4

3 回答 3

0

您需要确保在显示每个模式后完全销毁您的#dialogDiv。

在为要显示的每个对话框重用相同的 div 时,我遇到了同样的问题。

我忘记了,但是在定义你的 dialogOpts 时添加如下内容:

close: function() { $("#dialogDiv").dialog("destroy"); },

这是 jQuery API 参考:http ://docs.jquery.com/UI/Dialog

希望这能提供一些见解!

  • 杰西
于 2010-04-27T16:29:33.140 回答
0

我想这与您如何多次创建对话框有关。您可能想尝试在现场之外创建对话。然后只需根据需要更改对话框内容并重新打开对话框。在这种情况下,我通常做的是放置一条加载消息,打开对话框,然后启动 ajax 调用以替换内容。像这样的东西。

$(function () {

  $("#dialogDiv").dialog({
      modal: true,      
      bgiframe: true,      
      autoOpen: false,      
      height: 600,      
      width: 450,      
      overlay: {      
        opacity: 0.7,      
        background: "black"      
      },      
      draggable: true,      
      resizeable: true
  });

  $('a.click').live('click', function() {      
    var url = '/Tracker/Info?id=' + $(this).attr("id");      
    $("#dialogDiv")
      .html('Loading')
      .dialog("open")
      .load(url);      
  });

});
于 2010-04-27T16:30:01.160 回答
0

我在这里使用 .one() 方法找到了解决方案

于 2010-04-28T10:39:54.810 回答