在jquery中重构“停止运行此脚本?”错误
Refactor out "Stop running this script?" error in jquery
我一直在调整这个,那个和另一个,试图让"停止运行此脚本?"错误在IE7中消失 - 所有用户此时都需要使用的浏览器 :P 我已经尝试了几次改进尝试; 所有这些都导致脚本停止工作,而不是运行很长时间。 我试过使用 setTimeout(),但没有运气。 可能是我做得不对。 谁能建议改进它以使其更有效率的方法(并让长时间运行的脚本消息消失)?
代码如下:
该 HTML:
<div class="changeView" style="float:right;">Show All...</div>
<div id="accordion" style="width: 99%;">
<% foreach (var obj in Model.Objects) { %>
<h3><a href="#"><span class="title"><%:obj.Id%></span><span class="status" style="font-size:75%"> - <%:obj.Status%></span></a></h3>
<div id="<%:obj.Id %>">
<div class="loading"><img src="<%=Url.Content("~/Content/Images/ajaxLoader.gif") %>" alt="loading..." /></div>
</div>
<% } %>
</div>
然后我们有一个点击功能来启动它......
$(function () {
$(".changeView").click(function () {
var divText = $(this).html();
var src = '<%=Url.Content("~/Content/Images/ajax-loader.gif")%>';
if (divText == "Show All...") {
$(this).html("Show Filtered...");
$('#accordion').accordion('destroy');
$('#accordion').empty();
$('#accordion').addClass("loading");
$('#accordion').append('Loading Information...<img src="' + src + '" alt="loading..." />');
changePartialView("all");
}
else {
$(this).html("Show All...");
$('#accordion').accordion('destroy');
$('#accordion').empty();
$('#accordion').addClass("loading");
$('#accordion').append('Loading Information...<img src="' + src + '" alt="loading..." />');
changePartialView("filter");
}
});
});
接下来调用 changeView 函数:
//change view and reinit accordion
function changePartialView(viewType) {
$.ajax({
type: "POST",
url: "<%:Model.BaseUrl%>" + "ToggleView",
data: "Type=<%:Model.Target%>&Id=<%:Model.Id%>&view=" + viewType,
success: function (result) {
$('#accordion').empty();
$('#accordion').removeClass();
for (var index = 0; index < result.Html.length; index++) {
$('#accordion').append(result.Html[index]);
}
var $acc = $("#accordion").accordion({
collapsible: true,
active: false,
autoHeight: false,
change: function (event, ui) {
var index = $acc.accordion("option", "active");
if (index >= 0) {
var clickedId = ui.newHeader.find("a").find(".title").text();
getRequirements(clickedId);
}
else {
// all panels are closed
}
}
});
},
error: function (xhr, err) {
alert("readyState: " + xhr.readyState + "'nstatus: " + xhr.status);
alert("responseText: " + xhr.responseText);
alert("Error in ajax: " + result);
}
});
}
注意:结果。HTML 返回格式化 HTML 的通用列表,折叠琴的每个面板对应一个列表。 除了长时间运行的脚本错误消息外,每个人都工作得很甜蜜。
返回值的说明:结果。HTML 由大约 200-250 个这些字符串的实例组成:
"<h3><a href='"#'"><span class='"title'">" + obj.Id +
"</span><span class='"status'" style='"font-size:75%'"> - " + obj.Status + count +
"</span></a></h3><div id='"" + obj.Id + "'"><div class='"loading'"><img src='"" +
Url.Content("~/Content/Images/ajaxLoader.gif") + "'" alt='"loading...'" /></div></div>")
for (var index = 0; index < result.Html.length; index++) {
$('#accordion').append(result.Html[index]);
}
一次将大量节点一个附加到 DOM 中很慢,您可以加快速度的一种方法是将它们全部插入到一个未连接的节点中,然后在完成后一次将它们全部移动:
var holder = $('<div></div>');
for (var index = 0; index < result.Html.length; index++) {
holder.append(result.Html[index]);
}
$('#accordion').append(holder.children());
更改服务器以返回数据而不是大量 HTML。使用客户端模板化解决方案。然后,一旦你有一个数组,你就可以异步更新显示(就像你提到的setTimeout
一样)
在这个大的HTML字符串中,你只有两个动态的东西,非常浪费。
还是退货更少?
相关文章:
- 动态创建的iframe中的window.onerror在lne 0处给出脚本错误
- 加载Chrome扩展中的脚本错误
- Jquery 脚本错误“访问被拒绝”
- 如何防止 C# Web 浏览器中的脚本错误
- 在jquery中重构“停止运行此脚本?”错误
- "停止运行脚本错误“;在IE8中拥有大量收藏
- 避免使用神秘的javascript"脚本错误”;使用cdn
- java脚本错误对象没有'不支持此属性或方法
- 禁用文本框的脚本错误显示
- 谷歌SWIFFY无法在IE9中工作-脚本错误'运行时.js'
- 悬停时IE 8中的脚本错误
- Chrome扩展:如何在全局范围内捕获/处理内容脚本错误
- Liferay主题脚本错误:未捕获语法错误:意外的标记ILLEGAL
- Java脚本错误-can't将未定义转换为对象
- j查询文件上传脚本错误
- IE 与 FireFox 中的 Java 脚本错误
- 一些脚本错误,找不到解决方案
- JavaScript var 分配一个动态可为空的值显示脚本错误
- 新鲜的MVC 3项目给了我奇怪的不显眼的验证脚本错误
- Chrome 用户脚本错误:“不安全的 JavaScript 尝试访问框架”