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将被定义.
只是有同样的问题。试图弄清楚出什么问题了,我的大脑几乎断了。
变得非常简单-先前执行的某些代码使用console.log(...),但是除非启用了开发工具,否则它不会在IE中定义。
修复很简单-删除/注释console.log或在使用第一个console.log之前将此代码添加到您的文件中:
if (typeof console === "undefined"){
console={};
console.log = function(){};
}
Run Code Online (Sandbox Code Playgroud)