2010-08-30 108 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