我有一个JQuery对话框,其中包含一些错误信息,以及一个操作链接'详细信息'切换更详细的错误说明。
我的问题是,在我打开和关闭对话框大约六次后,它会在打开和无响应时逐渐变慢。 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();
});
});
Razor局部视图:
<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函数被调用的次数越来越多。比如第一次它只调用一次点击功能......然后第二次调用它两次......然后是四次,然后是八次,依此类推。因此其内容正在被重新加载的次数越来越多。但是我不知道为什么在我的部分视图中包含这个会导致这种情况发生......
所以如果有人能告诉我为什么会导致这个问题,我就把它打开。
答案 0 :(得分: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');
});