我有一个固有的复杂的页面设计的idot运行的脚本加载,这需要太多的时间和生成停止脚本对话框。
除了IE6/7/8之外,该页面在所有经过测试的浏览器上都可以正常工作。
我想知道是否可以使用settimeout分解脚本以避免此错误。
类似于:$('.level').each(f(){settimeout(f(){script},1)});
更新:是的,我当然知道每个人都想看代码,但它也很大。也许这一行将表明在onload的顶层发生了什么:
$('#thetable').find('tr.listing :checkbox').click(function(event) { ... });其中在#thetable中有大约5700个dom节点,这是比较普通的搜索结果集之一。
发布于 2012-03-23 22:43:23
我认为在这个选择器上搜索$('#thetable').find('tr.listing :checkbox')是在IE中花费时间的原因。
有几件事你可以做。
听起来像是在表中显示结果集。在这种情况下,您可能希望实现分页,并让脚本返回到服务器以获取有关页面更改事件的更多结果。这将意味着要处理的DOM节点更少,并且应该处理停止脚本问题。
你可以尝试的另一种方法是给你的复选框提供可预测的ID,然后做一个直接的选择,比如$("#thetable_checkbox_“+ checkboxid),然后让一个forloop迭代结果,改变你选择的checkboxid。
下面是一些伪代码作为示例
for (int x = 0; x < numResults; x++) {
setTimeout(function() {
$("#thetable_checkbox_" + x).bind(function() {
clickEventFunction()
});
}, 0);
}您的复选框ID已生成ID,如thetable_checkbox_1等。
您提到的用setTimeout分解脚本的方法也可以使用,但您需要避免使用jQuery选择器,这可能需要很长时间。您还可以将超时值设置为0,因为您希望它在浏览器准备就绪后立即运行。将超时设置为0YEILD到浏览器,并允许它在返回到脚本之前运行任何挂起的操作。如果脚本长时间运行,您应该显示一个模式加载对话框,以便页面仅在准备就绪时显示给用户。
https://stackoverflow.com/questions/9840152
复制相似问题