0

いくつかのエラー情報を含む JQuery ダイアログと、より詳細なエラーの説明を切り替えるアクション リンク「詳細」があります。

私の問題は、ダイアログ ボックスを約 6 回開いて閉じると、開いたときに次第に遅くなり、応答しなくなることです。Google chrome からプロセスを強制終了するように求められることもあります。理由がわかりません。jquery ダイアログを間違った方法で使用しているのですか?

以下はコード例です。メインの html ページにある errorbox div は以下に表示されていません。それは単なる空のdivであり、そのコンテンツはコントローラーから取得され、部分ビューを返すだけです。

Javascript:

$(document).ready(function () {

    $.ajaxSetup({
        cache: false
    });
    var dialog = $(".errorbox").dialog({
        title: 'Error',
        autoOpen: false,
        modal: false
    });
    $('.showhidetarget').hide();


    //Open dialog box for errors
    $(".openDialog").click(function (e) {
        e.preventDefault();
        $(".errorbox").load(this.href);
        dialog.dialog('open');

    });

    //Show details for Error box message
    $('.showhidetrigger').click(
    function () {
        $('.showhidetarget').toggle();
    });

});

カミソリ部分ビュー:

<script src="../../Scripts/OpenDialog.js" type="text/javascript"></script>


<p>@Model.friendly_message</p>

<a class ="showhidetrigger" href="#">Details</a>
<div class = "showhidetarget">
   <p>@Model.detailed_message</p>
</div>

含まれる jquery ファイル:

<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/OpenDialog.js")" type="text/javascript" ></script>

**

編集

**

問題の解決策は見つかりましたが、理由は見つかりませんでした。

私のjavascriptファイルOpenDialogへのインクルードを部分ビューから削除し、リンクのトグルを部分ビューのスクリプトタグに移動すると、問題が修正されます。

したがって、部分ビューにjavascriptファイルを含めると問題が発生する可能性がありますが、その理由はわかりません。クリック関数はますます呼び出されます。最初はクリック関数を1回呼び出すだけです.2回目は2回呼び出します...次に4回、次に8回などです。そのため、そのコンテンツは何度もリロードされています。しかし、これを部分的なビューに含めると、なぜこれが発生するのかわかりません...

したがって、これが問題を引き起こしている理由を誰かが教えてくれれば、これを開いたままにします。

4

1 に答える 1

0

jQueryロードの説明は次のようになります

サーバーからデータをロードし、返されたHTMLを一致した要素に配置します。

ただし、どこにも「交換」とは書かれていません。ダイアログを開くたびに、より多くのデータがダイアログに読み込まれると推測できます。新しいデータをダイアログにロードする前に、ダイアログからコンテンツをクリアしてみてください。

//Open dialog box for errors
$(".openDialog").click(function (e) {
    e.preventDefault();
    // Empty the box before loading more content
    $(".errorbox").empty().load(this.href);
    dialog.dialog('open');
});
于 2012-04-09T16:08:03.363 に答える