IE JQuery就绪function无法正常工作

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

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

$(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文件的包含,这些文件都是从本地版本加载的,并且它们都有表单

  

有任何想法吗?

注意

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

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

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

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

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

 setTimeout(initialize, 200); 

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

  

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

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

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

它将创建一个“假的” console对象,以便定义console.log

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

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

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

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

试着把你的

 $(document).ready(function... 

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

在页面顶部写下两行。

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

这解决了我的问题

不知道我在哪里找到了这个解决方案,但这对我的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内容后执行这些代码。

使用(function($) {})(jQuery); 为我解决了这个问题。

 (function($) { // body code })(jQuery); 

这对我有用。 我取代了

 $(document).ready(function... 

 jQuery(document).ready(function...