这是一个影响 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