2017-10-20 34 views
1

我想在我的ASP.NET應用程序中實現jQuery datatable - jQuery UI模式功能。 (如下)jQuery的數據表 - 「jqueryui模態」在頁面中創建重複的對話框的HTML

https://datatables.net/extensions/responsive/examples/display-types/jqueryui-modal.html

我看到的問題是,該對話框創建頁面重複HTML項。

我可以看到在數據表中的網站也問題(每行中點擊加號展開對話,複製HTML項將被創建。)

enter image description here

任何建議/推薦避免重複輸入將不勝感激。

回答

1

問題是,每次你點擊打開一個它會創建一個新的模式,而當你關閉它時,它只是將其顯示屬性更改爲none,並將其留在DOM中。

您需要在關閉後/關閉DOM時從DOM中刪除模態。幸運的是,jQuery UI有一個非常強大的API,並且模態(對話框)有可以監聽的事件。

我不知道你的特定選擇器對於你的模態是什麼,所以你需要調整下面的內容,但基本上你可以聽對話的關閉事件並關閉它。

$(".selector").dialog({ 
    close: function(event, ui) { 
    $(this).remove(); 
    } 
}); 
+0

感謝您的信息。我會嘗試。 –

+0

不客氣。再次,您可能需要調整選擇器以適合您的代碼。但校長仍然是一樣的。 –

1

好吧,我真的想在這裏添加一些東西來幫助其他人。在嘗試所有解決方法後,我學到了一些非常重要的東西。如果將一個完整的DOM加載到對話窗口中,則會創建另一個實例,並且您將花費大量時間。在我的情況下,我在MVC中加載了一個局部視圖,並確定它顯示了一個完整的DOM。我見過很多關於嘗試銷燬,刪除甚至手動刪除帶有循環的重複文章的文章。這些不是真正的答案,而是另一個問題的創可貼。另外,當在對話框中加載數據時,可能會在執行ajax調用時注意,您不是在該過程中重複加載腳本。如果你需要調用$('。selector')。dialog()。dialog(),那麼第一個實例就有衝突。

我的解決方案在沒有其他人的情況下工作。 1)我修改了我的部分視圖,將a放在只包含我需要的內部html。 2)獲取數據返回整個DOM,所以我使用find()來限制對話框中返回的內容。 3)當關閉對話框時,使用對話框('close')方法,即使根據文檔也是如此。

如果您有刷新問題,請小心構建對話框,我選擇避開doc ready構造,因爲它有時會導致衝突。使用時可以構造對話框。

請注意什麼數據真的會被返回奇怪的行爲會導致。

現在它的功能如下,我真的希望這將節省一些小時無盡的一切爲人:)它爲我工作。

var editOptDialog = YourOptions 

Open: 
     $("#dialog-edit").dialog(editOptDialog); 
     $("#dialog-edit").dialog('open'); 
     $.get($(element).attr('url'), function (data) { 
      $("#dialog-edit").dialog().html($(data).find('#content-modal')); 
     }); 
Close: 
     $("#dialog-edit").dialog().dialog("instance").close();