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...