0

我有一个 JQuery 对话框,其中包含一些错误信息,以及一个用于切换更详细错误说明的操作链接“详细信息”。

我的问题是,在我打开和关闭对话框大约六次后,它在打开和无响应时逐渐变慢。谷歌浏览器有时甚至会要求我终止该进程。我不明白为什么,我是否以错误的方式使用 jquery 对话框?

下面是一个代码示例,errorbox div 在主 html 页面中,下面没有显示。它只是一个空的 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 文件会导致问题,但我不知道为什么。click 函数被调用的次数越来越多。例如第一次它只调用一次点击函数......然后第二次它调用它两次......然后是四个,然后是八个等等。所以它的内容被重新加载的次数越来越多。但我不知道为什么在我的部分观点中包含这一点会导致这种情况发生......

因此,如果有人能告诉我为什么这会导致问题,我将保持开放状态。

4

1 回答 1

0

jQuery load的描述为

从服务器加载数据并将返回的 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 回答