显然很多人都遇到过这个问题,但我还没有找到一个有效的解决方案。
我有一些代码需要在页面加载后运行,所以我把它卡在了下面的块中:
$(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中打开调试器时,它开始正常工作。
答案 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);