2010-08-30 70 views
0

我的页面上有一个锚点标签,可以在活动和取消的实体之间切换。一次只显示一个链接,取决于用户想要查看的内容。我使用ajax来替换HTML或者有效的信息或取消信息。见下文。jquery ui加载对话框点击只能触发一次

我遇到的问题是,当用户单击链接时,应该显示加载对话框,但对话框只在第一次点击时显示,而不是后续点击。这只在Chrome中发生。

$(document).ready(function() { 
    $("a#showCancelled, a#showActive").live("click", function(event) { 
     event.preventDefault(); 
     $("#dialog-modal").dialog('open'); 
     $.ajax({ 
      type: "GET", 
      url: $(this).attr("href"), 
      dataType: "html", 
      cache: false, 
      success: Success, 
      error: Error 
     }); 
    }); 

    $("#dialog-modal").dialog({ 
     autoOpen: false, 
     height: 50, 
     width: 400, 
     modal: true, 
     closeOnEscape: false, 
     draggable: false, 
     resizable: false 
    }); 
}); 

function Success (data, status) { 
    $("#dialog-modal").dialog('close'); 
    $("body").html(data); 
} 

HTML

<div id="dialog-modal" title="Loading..."> 
    <p><img src="../images/busy.gif" /> Just a moment...</p> 
</div> 

编辑 - 我从建议改变了我的代码下面包裹我想用一个虚拟<div>更新的内容。但是现在对话框根本没有打开,并且在IE7中更新内容时什么都不显示。

$("a#showCancelled, a#showActive").live("click", function(event) { 
    event.preventDefault(); 
    $link = $(this).attr("href"); 
    $("#dialog-modal").dialog('open'); 
    $("#dummy").load($link + " #dummy"); 
    $("#dialog-modal").dialog('close'); 
}); 
+0

现在运行,肯定是浏览器缓存问题。 – 2010-08-30 17:05:18

回答

1

你这个替换<body>元素的内容:

$("body").html(data); 

这将破坏真正的页面内的任何对话或任何...你想也许坚持在另一个容器响应,像这样?

$("#result").html(data); 

如果没有,你要么需要设置<body>内容后重新运行对话框创建片:

$("#dialog-modal").dialog({ ...options... }); 

或者每次点击创建,并调用.dialog('destroy')第一,虽然这是一个有点更浪费。

+0

啊是的,这是有道理的,我想问题是,然后,Ajax请求发回整个HTML页面。有没有办法从数据中提取特定的div并将其放置在结果div中?也许使用.load? – 2010-08-30 14:55:00

+0

@Randall - 是的,你可以做'.load(“page.html #content”)'例如,只需在URL后面加一个空格和选择符即可。 – 2010-08-30 14:56:08

+0

它本身不是一个静态的.html页面,这就是为什么我需要使用.ajax方法返回它。类似.load(data#content#content)就是我需要使用它的方式。 – 2010-08-30 15:04:22