2017-10-20 32 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();