使用ASP.NET MVC 4,jQuery 1.6.2,jQuery UI 1.8.11。目前在Firefox 16.0.2中進行調試。對話框內的對話框呈現N次超過自己
我正在努力使這個工作,所以我有一個可重用的jQuery UI模式對話框autoOpen: false
從主頁面打開。到現在爲止還挺好。這個可重用的jQuery UI對話框將打開一個新的模式對話框,隨後在需要的時候再次銷燬並創建它(我試圖讓另一個可重用,但是我失敗了,它在第一個對話框中一直顯示爲div,而不是作爲一個新的單獨對象對話框,因此最終我決定在每次需要時創建它)。
當我第一次打開第一個對話框時,我可以打開並關閉第二個對話框,沒有任何問題。但是,當我關閉第一個對話框並再次打開時,會出現問題。它的行爲就像我打開第一個對話框的次數一樣多了對話框佔位符div。雖然我很確定我銷燬了第二個對話框,並且每次關閉它時都會移除佔位符div。
我已將對話框代碼放入/Views/Shared/_Layout.cshtml文件中,並且該佈局文件由主頁面引用。對於那些不熟悉ASP.NET MVC的人來說,佈局文件是一個共享文件,其中包含頁眉,頁腳和其他用於定義網頁佈局的html元素,以便您可以從網站中的任何View中引用它。所以這個佈局與任何引用該佈局的View都一起呈現。
這裏是在我的佈局文件中的(僞)代碼:
<html>
<head>
<script type="text/javascript">
$.ajaxSetup({ cache: false });
$(document).ready(function() {
$("#veliki").dialog({
close: function() {
$("#veliki").html("");
$("#maleni").dialog("destroy");
$("body").find("#maleni").remove(); /* a desperate attempt to remove ALL divs which hold the 2nd dialog, was just: $("#maleni").remove(); */
},
modal: true,
height: 600,
width: 800,
left: 0,
autoOpen: false
});
$(".openDialog").live("click", function (e) {
e.preventDefault();
$("#veliki").load($(this).attr('data-url'));
$("#veliki").dialog("open");
});
});
</script>
</head>
<body>
<div id="veliki"></div>
@RenderBody(); <!-- The ASP.NET MVC view gets rendered here -->
</body>
</html>
與所述第二對話的代碼被放置在其中引用另一個佈局(其不包含任何jQuery的佈局的視圖中的一個碼)。該視圖中的代碼如下:
<script type="text/javascript">
$(document).ready(function() {
$(".openSubDialog").live("click", function (e) {
e.preventDefault();
$('<div id="maleni"></div>')
.appendTo("body")
.dialog({
close: function() {
$("#maleni").dialog("destroy");
$("#maleni").remove();
$("body").find("#maleni").remove(); /* delete them all. but where did "they" appear from?! */
},
modal: true,
height: 450,
width: 600,
left: 0
})
.load($(this).attr('data-url'));
});
});
</script>
概括起來:
- 我通過點擊主頁的鏈接打開
#veliki
對話框。 - 我通過單擊第一個對話框中的鏈接創建並打開
#maleni
對話框。 - 我關閉了
#maleni
對話框,破壞它並刪除#maleni
div。 - 我關閉了
#veliki
對話框。 - 我打開
#veliki
對話框,方法是單擊主頁中的另一個鏈接。 - 我創建並打開了
#maleni
對話框,它現在神奇地出現了兩次(如FireBug所示)。 - 我用我的頭撞牆而不解決任何問題。
任何人有想法?
謝謝,很乾淨,很好完成。我嘗試了這樣的事實,不知道爲什麼它不起作用。你只需要改變$(「body」)。delegate(「。openDialog」,「click」,function(e){'instead of'$(「#veliki」)。delegate(「。openDialog」 ,「點擊」,功能(e){' –