IE8 - 内容加载后如何运行jquery代码?

时间:2012-11-01 21:24:05

标签: jquery ajax internet-explorer-8

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

它在firefox中正常工作 - 页面渲染很快,然后jquery代码运行ajax调用加载其他元素。

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

有没有解决方法?在这方面让IE8像Firefox一样的任何方式...尽快渲染页面,然后在渲染后运行一些jquery代码/ ajax调用?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您是否尝试将您的部分移至页面末尾?