2

我有一种情况,我加载了一个父网页(恰好是 Java JSP),它的内容是我在文档就绪函数中使用 ajax(异步)加载的,期望页面能够快速呈现任何内容,然后运行 ​​jquery 代码到页面显示后执行异步工作。

它在 Firefox 中按预期工作 - 页面快速呈现,然后 jquery 代码运行 ajax 调用加载其他元素。

在 IE8 中,它等到一切都完成,然后呈现完成的结果。它不尊重我的文档准备尝试。它坐在那里加载页面,同时在文档准备部分运行我的代码,然后最终所有完成的结果都被放在浏览器上。

有什么解决方法吗?有什么方法可以让 IE8 在这方面表现得像 Firefox……尽快渲染页面,然后在渲染后运行一些 jquery 代码/ajax 调用?

4

2 回答 2

2

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

于 2012-11-01T21:34:39.407 回答
0

您是否尝试过将您的部分移动到页面末尾?

于 2012-11-01T21:26:55.137 回答