在IE6中jQuery $(document).ready()失败

时间:2009-01-21 01:16:34

标签: javascript jquery internet-explorer-6

我有以下代码:

// Creates a timer to check for elements popping into the dom            
timer = setInterval(function ()
{          
    for (p in pixelTypes)
    {                             
        checkElems(pixelTypes[p]);
    }                            
}, 10);

// Add Document finished callback.
$(document).ready(function ()
{         
    // Document is loaded, so stop trying to find new pixels
    clearInterval(timer); 
});       

在Firefox中,它运行良好,但在IE6中,我在$(document).ready行上遇到“Object Expected”错误。

我无法弄清楚是什么原因导致IE6无法识别它,jquery已经完全加载了。

这是一个已知问题吗?

12 个答案:

答案 0 :(得分:15)

对于任何有兴趣的人来说,只需几点:

$(document).ready(function() {...});$(function() {...});意味着完全相同的事情。后者是前者的简写。

如果您为大型网站开发,使用多个Javascript库,或者您开发的插件旨在与其他人的工作兼容,则您不能相信与jQuery对象关联的美元符号($)。使用以下符号表示安全:

(function($) { [your code here] })(jQuery);

这会将jQuery传递给自动执行的函数,并将$与此函数中的jQuery对象相关联。那么$在你的函数之外代表什么并不重要。

要回到您的问题,您是否在收到错误时检查了是否已分配计时器变量?我相信浏览器会将$(document).ready(function() {...}); all视为一行,所以如果你有某种调试器告诉你这是违规行,那么它可能是定时器变量......

最后一件事:在Javascript中,在新行上放置大括号是不正确的。由于Javascripts分号插入,这可能会导致非常糟糕的错误。有关详细信息,请阅读Douglas Crockford的Javascript:好的部分:

http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742/ref=sr_1_1?ie=UTF8&s=books&qid=1267108736&sr=1-1

无论如何,真的希望我没有让任何人感到不安。希望你解决问题!

编辑:我不确定这是罗伯茨完全合格的意思,但据我所知,当URL完全合格时,意味着没有任何部分丢失,即。它是以http://或https://(或其他一些协议)开头的绝对URL。 如果我错了,请纠正我!

答案 1 :(得分:5)

我过去也遇到过同样的问题。这是一个零星的问题,并且很可怕并且重现。

我找到的解决方案是将$(document).ready(function() {...});替换为jQuery(function() {...}),它就像魅力一样!

$(document).ready(function() {...});移到底部对我的用例不起作用。

this post中的评论非常有帮助(我第一次读到这样做的方式)

答案 2 :(得分:3)

如果有人遇到同样的问题,你应该看看当你给javascripts打电话type="application/javascript"时,我消除它并且它被纠正了,我认为这是IE的一些问题和类型的事情

答案 3 :(得分:1)

你确定加载了jQuery吗?尝试使用以下警报进行调试:

alert(typeof $);

您也可以尝试不同的语法:

$(function() {
     clearInterval(timer); 
});

好的,所以从您的评论中,上述内容并没有帮助。在我的经验中,语法错误似乎发生了“对象预期”错误。这是你得到的确切代码吗?如果没有,你可以发布吗?

答案 4 :(得分:1)

确保您的脚本类型为 text / javascript

<script type='text/javascript'

答案 5 :(得分:1)

DateTime选择器在我的本地XP测试中运行得很好,但是一旦部署在服务器上就失败了“Object Expected”。持续2天后,这就是我解决问题的方法,在Javascript路径周围添加了Url.Content!

<script src="<%= Url.Content("~/Scripts/jquery-1.4.1.min.js") %>" type="text/javascript"></script>

<script src="<%= Url.Content("~/Scripts/ui/minified/jquery.ui.core.min.js") %>" type="text/javascript"></script>  
<script src="<%= Url.Content("~/Scripts/ui/minified/jquery.ui.datepicker.min.js") %>" type="text/javascript"></script>

答案 6 :(得分:0)

我认为你不应该按照自己的方式对元素进行轮询。

文档就绪事件会在浏览器加载足够的时间后立即调用,以便您能够操作页面,因此您应该只在$(document).ready()块中进行DOM处理。

答案 7 :(得分:0)

您可以尝试使用旧的skool方法来检查文档是否“就绪”...将脚本放在结束之前&lt; / body&gt; tag - 我相信它与jQuery的'ready'事件具有相同的效果 - 实际上,它可能更快这样做。


根据我的经验,IE6中的“对象预期”错误因语法错误而显示 - 如果您还没有... {/ p>,则值得将脚本放入JSlint

答案 8 :(得分:0)

我在我的机器上遇到了这个问题,因为能够找到快速解决方法。这是我做的:

1.使用nickf的建议“alert(typeof $)”调试我的javascript并获得“未定义”警报消息

2.然后我完全限定了我的jQuery脚本资源。

3.Reload我的页面并收到“功能”警报消息

BTW,我在XP上使用IIS 5.1。我的网站配置为使用“通配符映射”来获取asp.net mvc框架的优势。我认为这种配置导致链接断开。

有关如何在旧版本的IIS上设置MVC的更多信息,请查看Phil Haack的帖子: http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx

答案 9 :(得分:0)

$(document).ready()会告诉你dom何时准备就绪,但并非所有资产都必须完成。

如果您想确保所有资产都已完成加载,请改用 $(window).load()。最常见的用途是确保图像加载完成,但它也可能适用于您的脚本问题。

答案 10 :(得分:0)

如果它位于你的body元素中的script元素中,(即)..

原因可以是您使用script-tag传递的属性。如果是:

<script type="text/javascript">...</script>

IE6可能会出错。你应该使用

<script language="javascript">...</script> 

然后错误就消失了。

答案 11 :(得分:0)

我遇到了同样的问题,脚本错误告诉我该对象未定义。我尝试了这里列出的所有建议但没有用。我唯一没考虑的是安全性,我忘记了所有关于我的表单身份验证的事情,结果我忘记了脚本文件夹上的授权,该文件夹拒绝访问jQuery库!!!

希望这有帮助。