2012-02-09 32 views
0

當用戶導航到不同的區域時(通過更新div),我們正在動態更新部分網頁。我們有一節包含一個jQuery對話框以及創建對話框的腳本。當我們第一次構建頁面時,一切都很好。然後我們用包含一個新對話框的新內容更新div,但是當我們顯示這個對話框時,我們會得到之前存在的舊對話框。我已經嘗試在加載新內容之前銷燬對話框,在這種情況下,新對話框將不會顯示。該對話框隨着按鈕單擊事件打開。看來加載一個jQuery對話框的div不起作用。這有什麼限制嗎?我正在用jquery div.html(內容)加載新內容。新內容正在加載,因爲我可以看到其他更改。jquery使用包含腳本的HTML更新div

+2

我們可以看到代碼嗎? – ShankarSangoli 2012-02-09 02:29:55

+0

更新內容並銷燬對話框後,您是否在新元素上重新初始化對話框(無論您將它連接到哪個元素?)。例如。 。'$( 「#對話」)對話框( '毀滅'); $( 「格」)HTML(內容); $(「#button」)。click(function(){$(「#dialog」)。dialog(「open」);});' – Soliah 2012-02-09 02:30:46

+0

你是怎麼稱呼你的動態加載對話框的,你能給出一些代碼嗎? – 2012-02-09 02:30:59

回答

0

聽起來好像你需要重新註釋評論中的cilck事件。重新綁定$.ajax()調用中的成功選項中的元素。

$.ajax({ 
    beforeSend: function() { 
     // Unbind all dialogs first. 
     $(".dialog").each(function() { 
      $(this).dialog("destroy"); 
     }); 
    }, 
    url: "/Foo/GetSomeData", 
    type: "GET", 
    success: function (data) { 
     $("div").html(data); 

     // Get all buttons and bind click to open dialog 
     // You'll need to customize this logic depending on your markup. 
     $(".button").each(function() { 
      $(this).click(function() { 
       // Determine which dialogs need to be bound. 
       $("#dialog_1").dialog("open"); 
       // etc 
      }); 
     }); 
    } 
}); 
+0

有沒有辦法找到所有的對話框不知道每個人的ID? div更新後,我不知道ID。我們的很多代碼都是動態生成的,因此ID不斷變化。 – rjhdakota 2012-02-09 04:10:24

+0

沒有一些對話框標記的例子,很難想出一個獲取對話框的方法。如果你可以添加一些標記到你的問題,這將是有益的。但最終,您需要提供一個系統,在服務器端生成的標記允許客戶端代碼查找對話框元素。例如,這可能是一個編號系統。 – Soliah 2012-02-09 04:18:37

+0

感謝您的反饋,但重新綁定似乎不起作用。我們做的工作是當我們用新內容更新div時,我們更改了對話框的ID。新的按鈕綁定到對話框,一切正常。但是,這可能會導致內存泄漏,因爲舊對話框仍在內存中。我將不得不找出一種方法來銷燬舊的對話框(類似於上面的代碼),但只能在我們正在更新的div中的代碼段進行。 – rjhdakota 2012-02-09 16:06:00