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

Eli*_*lie 9 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

<script type="text/javascript" src=""></script>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

注意

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

Roc*_*mat 14

我没有看到任何错误,但我只想指出一些事情.

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

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

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

setTimeout(initialize, 200);
Run Code Online (Sandbox Code Playgroud)

另外,你确定你宣布了$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>
Run Code Online (Sandbox Code Playgroud)

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

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

window.console = window.console || {log:function(){}};
Run Code Online (Sandbox Code Playgroud)

它将成为一个"假的" console对象,因此console.log将被定义.


ast*_*tax 5

只是有同样的问题。试图弄清楚出什么问题了,我的大脑几乎断了。

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

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

if (typeof console === "undefined"){
    console={};
    console.log = function(){};
}
Run Code Online (Sandbox Code Playgroud)