内容加载后如何运行jquery代码?
我有一种情况,我加载了一个父页面(恰好是Java JSP),其中包含我正在使用ajax(asynch)在文档就绪函数中加载的内容,期望页面能够快速呈现任何它可以运行的jquery代码在页面显示后执行异步工作。
它的工作方式与firefox中预期的一样 - 快速呈现页面,然后jquery代码运行ajax调用来加载其他元素。
在IE8中,它会一直等到一切完成,然后呈现完成的结果。 它并不尊重我准备好的文档。 它在加载页面的同时在准备好文档的部分中运行我的代码,然后最终在浏览器中完成所有事情的完成结果。
有什么解决方法吗? 任何方式让IE8在这方面表现得像Firefox一样......尽快渲染页面,然后在渲染后运行一些jquery代码/ ajax调用?
这是一个影响IE6 7和8的错误。在IE 6 7和8中的窗口加载事件之前或之后,jQuery的文档就绪处理程序不会触发。这不会发生在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
它目前实际上并没有被标记为bug,但是如果你关注这个问题的历史,它会在整个jQuery开发过程中多次修复和解决。
编辑:我不完全确定在这个答案的IE6部分,我还没有用此测试IE6。
这是一个支持的JSFiddle,它显示它在IE7和8中不正确地等待(再次未在IE6中测试)。
在上述修复之前:http://jsfiddle.net/PFWmS/
上述修复之后:http://jsfiddle.net/PFWmS/7
你有没有尝试将你的部分移动到页面的末尾?
链接地址: http://www.djcxy.com/p/71253.html上一篇: how to run jquery code after content loads?
下一篇: Jquery Event in JS