IE JQuery就绪功能无法正常工作

时间:2012-01-13 19:18:10

标签: jquery internet-explorer

显然很多人都遇到过这个问题,但我还没有找到一个有效的解决方案。

我有一些代码需要在页面加载后运行,所以我把它卡在了下面的块中:

$(document).ready(function() {
    alert("Running initialization");
    initialize();
});
function checkDivLoaded() {
    if ( $('#footer').length == 0) $.error( 'not ready' );
}
function initialize() {
    try{
        checkDivLoaded();
        ...more code here
    } catch (err) {
        setTimeout(initialize, 200);
    }
}

这适用于所有浏览器,但IE除外。在那里,代码根本不执行。

这段代码位于我可以放置的页面的最低点(使用Zend Framework和特定于页面的ready()函数意味着它可以在页面上有多低)。我已经检查了js文件的包含,这些文件都是从本地版本加载的,它们都有表格

<script type="text/javascript" src=""></script>

有什么想法吗?

注意

当我在IE中打开调试器时,它开始正常工作。

7 个答案:

答案 0 :(得分:13)

我在这里看不出任何错误,但我只想指出一些事情。

在我这样做之前,请检查IE的JavaScript控制台,我的猜测是早期的脚本有错误,这就是为什么这个从未运行过。

而不是$(document).ready(function(){});,您实际上可以$(function(){})。但它不应该有所作为。

另外,请不要将字符串传递给setTimeout(他们在全局范围内得到eval'),传递一个函数。

setTimeout(initialize, 200);

另外,你确定你宣布$jquery(不应该是$.error)吗?

<script type="text/javascript">
   $(function() {
       initialize();
   });
   function checkDivLoaded() {
       if ($('#footer').length == 0){
          $jquery.error( 'not ready' );
       }
   }
   function initialize() {
       try{
           checkDivLoaded();
           //...more code here
       } catch (err) {
           setTimeout(initialize, 200);
       }
   }
</script>

编辑:如果您使用的是IE8或更低版本,除非调试器处于打开状态,否则它不会添加console(我希望任何认为这个好主意的人都被解雇了)。如果您的某个包含使用console.log,那么它将undefined,从而停止所有脚本执行。

尝试将其添加到页面顶部:

window.console = window.console || {log:function(){}};

它将生成一个“假”console对象,以便定义console.log

答案 1 :(得分:4)

刚遇到同样的问题。几乎打破了我的大脑试图弄清楚什么是错的。

变得非常简单 - 之前执行的一些代码使用了 console.log(...),但除非启用了开发工具,否则它未在IE中定义。

修复很简单 - 删除/ comment console.log或在使用第一个 console.log 之前将此代码添加到您的一个文件中:

if (typeof console === "undefined"){
    console={};
    console.log = function(){};
}

答案 2 :(得分:0)

尝试放置

$(document).ready(function...

在代码的底部。可能是IE在调用ready函数之前没有解析initialize()代码。

答案 3 :(得分:0)

在页面顶部写下两行。

    window.console = window.console || {log:function(){}};
    if (typeof console === "undefined"){
        console={};
        console.log = function(){};
    }

这解决了我的问题

答案 4 :(得分:0)

我不知道我在哪里找到了这个解决方案,但这对我的IE10有效。

我项目的一个例子:

var windowOnload = window.onload || function() {
                $('.toInitiate')[0].click();
                 $('a').click(function() {

                        if(this.className.indexOf("collapse") == -1)
                        {
                            $('.active').removeClass('active');
                            $(this).parent().addClass('active');
                            var className = $(this).parent().attr('class');
                        }
                    });

            };

            window.onload = function() {
                windowOnload(); 
            };

这些代码在加载所有html内容后执行。

答案 5 :(得分:0)

这对我有用。我取代了

$(document).ready(function...

jQuery(document).ready(function...

答案 6 :(得分:0)

使用public function getActiveCharges() { return $this->getCharges()->filter(function (Charge $charge) { return $charge->getIsActive() === true; //or you can omit '=== true' return $charge->getIsActive(); }); } 为我解决了这个问题。

(function($) {})(jQuery);