ASP.NET MVC 4、jQuery 1.6.2、jQuery UI 1.8.11 を使用します。現在、Firefox 16.0.2 でデバッグ中です。
私はこのことを機能させようとしているのでautoOpen: false
、メインページから開かれる再利用可能なjQuery UIモーダルダイアログがあります。ここまでは順調ですね。その再利用可能なjQuery UIダイアログは新しいモーダルダイアログを開き、後で破棄され、必要に応じて再度作成されます(他のダイアログも再利用可能にしようとしましたが失敗しました。新しい個別のダイアログではなく、最初のダイアログのdivとして表示され続けましたダイアログがあるべきなので、最終的には必要になるたびに作成することにしました)。
最初のダイアログを最初に開くと、2 番目のダイアログを問題なく開いたり閉じたりできます。ただし、最初のダイアログを閉じて再度開くと、問題が発生します。最初のダイアログを開いた回数と同じ数のダイアログ プレースホルダー div があるように動作します。私は2番目のダイアログを破棄し、それを閉じるたびにプレースホルダーdivを削除すると確信しています。
ダイアログ コードを /Views/Shared/_Layout.cshtml ファイルに配置し、そのレイアウト ファイルをメイン ページから参照します。ASP.NET MVC に慣れていない方のために説明すると、レイアウト ファイルは、Web ページのレイアウトを定義するヘッダー、フッター、およびその他の HTML 要素を含む共有ファイルであるため、Web サイトの任意のビューから参照できます。 . したがって、レイアウトは、そのレイアウトを参照するビューとともに実際にレンダリングされます。
私のレイアウトファイルの(疑似)コードは次のとおりです。
<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>
2 番目のダイアログに関連するコードは、別のレイアウト (jQuery コードを含まないレイアウト) を参照するビューの 1 つに配置されます。そのビューのコードは次のようになります。
<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
メイン ページの別のリンクをクリックしてダイアログを開きます。- 魔法のように 2 回表示されるダイアログを作成して開きます
#maleni
(FireBug で見られるように)。 - 何も解決しない頭で壁を叩きつける。
アイデアのある人はいますか?