IE7 jQuery(文件).ready()问题

时间:2010-05-26 11:27:33

标签: jquery

我有一个在Firefox中运行良好的页面,但在IE中引发错误。我正在动态加载jQuery(如果它尚未加载),然后在jQuery(document).ready()块中执行一些操作。但是,IE在遇到jQuery(document).ready()块时会抛出可怕的“Object expected”错误。

您可以在此处查看完整页面代码:http://www.pastie.org/977767

IE正在jQuery(文档).ready()中抛出错误。

关于这里发生了什么的任何想法?同样,这在Firefox中运行得非常好。看起来几乎像IE认为jQuery已经加载了但是当遇到jQuery(document).ready()块时它还没有或者jQuery仍在加载?

2 个答案:

答案 0 :(得分:2)

将脚本附加到文档时,将以异步方式下载该脚本。在IE中,以下脚本......

try{
jQuery(document).ready(function() {
    jQuery.getScript("/CalendarViewer/js/utils.js", function(){
        jQuery.getScript("/CalendarViewer/js/groupcatselector.js", function(){
            jQuery.getScript("/CalendarViewer/js/calendarportlet.js", function(){
                jQuery.getScript("/CalendarViewer/js/calendarportletmain.js", function(){
                    var cpm = calendarportletmain;
                    cpm.doEditDefaults("V_7f208bca412b42a68c19eb104bf46f14", "/CalendarViewer", groupCats_V_7f208bca412b42a68c19eb104bf46f14);
                });
            });
        });
    });
});
}catch(err){
    alert("error in view.jsp="+err.number+" "+err.description);
}
在IE完成下载和解析jQuery脚本之前,

...被解析并执行。如果Firefox已经缓存了脚本,那么在Firefox中可能不是这种情况,它可能需要时间下载并且可以立即解析。解析器的工作方式可能不同,Firefox在下载后立即解析脚本,IE排队解析,直到线程空闲为止。

您可以将此代码移动到setUpJquery函数的末尾,这意味着它只会在jQuery对象可用时执行。或者,您可以将代码放在其自己的函数中,并从setUpJquery函数调用该函数。

答案 1 :(得分:1)

我解决它的方式是:

$(document).ready( function () {
   document_init();
});

function document_init() {
  try{

    checkDivLoaded();

    [ ... do more stuff ... ]

  } catch( err ) {
    setTimeout('document_init()', 200);
  }
}

function checkDivLoaded() {
    if ( $('#targetDiv').length == 0) $jquery.error( 'not ready' );
}

它很漂亮,但它可以工作......它适用于几个文件,在我能想到的每个浏览器中(我关心的)并且意味着你不必弄乱父页面源代码。所以你可以清楚标记。