IE8 - 如何在内容加载后运行 jquery 代码?
Posted
技术标签:
【中文标题】IE8 - 如何在内容加载后运行 jquery 代码?【英文标题】:IE8 - how to run jquery code after content loads? 【发布时间】:2012-10-22 13:10:22 【问题描述】:我有一种情况,我加载了一个父网页(恰好是 Java JSP),该网页的内容是我在文档就绪函数中使用 ajax(异步)加载的,期望页面能够快速呈现任何内容,然后运行页面显示后执行异步工作的 jquery 代码。
它在 firefox 中按预期工作 - 页面快速呈现,然后 jquery 代码运行 ajax 调用加载其他元素。
在 IE8 中,它等到一切都完成,然后呈现完成的结果。它不尊重我的文档准备尝试。它坐在那里加载页面,同时在文档准备部分运行我的代码,然后最后所有完成的结果都被放在浏览器上。
有什么解决方法吗?有什么方法可以让 IE8 在这方面表现得像 Firefox……尽快渲染页面,然后在渲染后运行一些 jquery 代码/ajax 调用?
【问题讨论】:
可以确定 jQuery.document(ready) 是直接调用的,但请记住 AJAX 是异步的,您无法控制它何时返回。 【参考方案1】:这是一个影响 IE6 7 和 8 的错误。jQuery 的文档就绪处理程序直到 IE 6 7 和 8 中的窗口加载事件之前或之后才会触发。这在 IE9 中不会发生。
解决它的一种方法是自己处理事件。
<body class="jquerydomready">
<!--[if lt IE 9]>
<script>
$('body').removeClass('jquerydomready');
</script>
<![endif]-->
然后在你的脚本中使用这个:
function init()
// code here will be ran when document is ready
$("body").css("background-color","green");
if ( $("body").is(".jquerydomready") )
$(init); // not oldIE
else
// oldIE way
document.onreadystatechange = function()
if (document.readyState == "interactive") init();
请记住,如果您正在执行 ajax 请求并期望它们快速发生,否则代码将无法工作,我建议您转移到不需要它们快速发生的系统,因为您不能依赖网络总是很快。
票:http://bugs.jquery.com/ticket/12282
它目前实际上并没有被标记为一个错误,但是如果你关注这个问题的历史,它在整个 jQuery 的开发过程中已经被修复和未修复了好几次。
编辑:我不完全确定这个答案的 IE6 部分,我没有用这个测试过 IE6。
这是一个支持 JSFiddle,显示它在 IE7 和 8 中不正确地等待(同样未在 IE6 中测试)。
在上述修复之前:http://jsfiddle.net/PFWmS/
经过上述修复:http://jsfiddle.net/PFWmS/7
【讨论】:
优秀的帖子!感谢您为所有人提供此内容。【参考方案2】:您是否尝试过将您的部分移至页面末尾?
【讨论】:
以上是关于IE8 - 如何在内容加载后运行 jquery 代码?的主要内容,如果未能解决你的问题,请参考以下文章