我有一种情况,我加载了一个父网页(可能是Java JSP),该网页包含我正在使用文档就绪函数内的ajax(asynch)加载的内容,希望该页面能够快速呈现任何内容,然后运行jQuery代码以页面显示后执行紧急工作。
它按照预期在Firefox中正常工作-页面快速呈现,然后jquery代码运行ajax调用并加载其他元素。
在IE8中,它等待直到一切完成,然后呈现完成的结果。它不支持我的文档准备尝试。它位于此处,在“文档准备就绪”部分中运行我的代码时加载页面,然后最终所有内容的完成结果都会显示在浏览器中。
有什么解决方法吗?有什么办法可以使IE8在这方面表现得像Firefox …尽快渲染页面,然后在渲染后运行一些jquery代码/ ajax调用?
这是一个会影响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