10

我有以下代码:

// 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 已完全加载。

这是一个已知的问题?

4

12 回答 12

15

给感兴趣的人提几点建议:

$(document).ready(function() {...});$(function() {...});意思完全一样。后者是前者的简写。

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

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

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

回到您的问题,您是否检查过在收到错误时是否分配了计时器变量?我相信浏览器会将$(document).ready(function() {...});所有内容视为一行,因此,如果您有某种调试器告诉您这是有问题的行,则可能是计时器变量...

最后一件事:在 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

无论如何,真的希望我没有让任何人生气。希望你能解决问题!

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

于 2010-02-25T14:42:25.083 回答
5

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

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

移动$(document).ready(function() {...});到底部不适用于我的用例。

这篇文章中的评论非常有帮助(我第一次读到关于这样做的地方)

于 2009-11-19T23:06:43.090 回答
3

如果有人有同样的问题,你应该看看当你调用你的 javascripts 时是否有 type="application/javascript",我将其删除并已更正,我认为这是 IE 和类型 Thing 的问题

于 2010-07-22T03:06:20.210 回答
1

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

alert(typeof $);

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

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

好的,所以从您的评论来看,上述内容没有帮助。根据我的经验,“预期对象”错误似乎是由于语法错误而发生的。那是你得到的确切代码吗?如果没有,你能发一下吗?

于 2009-01-21T01:21:23.387 回答
1

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

<script type='text/javascript'
于 2010-09-29T06:29:23.933 回答
1

DateTime 选择器在我的本地 XP 测试中工作得很好,但是一旦部署在服务器上,它就会失败“预期对象”。经过 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>
于 2011-05-24T12:55:52.083 回答
0

我在我的机器上遇到了这个问题,因为能够找到一个快速修复。这是我所做的:

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

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

3.重新加载我的页面并收到“功能”警报消息

顺便说一句,我在 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

于 2009-04-18T23:09:30.800 回答
0

我有同样的问题,脚本错误通知我对象未定义。我尝试了此处列出的所有建议,但均无济于事。我唯一没有考虑的是安全性,我忘记了我的表单身份验证,结果我忘记了拒绝访问 jQuery 库的脚本文件夹的授权!!!

希望这可以帮助。

于 2010-11-15T16:02:06.307 回答
0

$(document).ready() tells you when the dom is ready, but not all assets are necessarily done coming in.

If you want to make sure all the assets are actually done loading, use $(window).load() instead. The most common use for this is to make sure that images are done loading, but it may work for your script problem as well.

于 2009-11-23T15:04:09.750 回答
0

如果它在您的正文元素内的脚本元素中,(即)..

原因可能是您使用脚本标签传递的属性。如果是:

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

IE6 会报错。你应该使用

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

然后错误消失。

于 2010-02-25T14:13:48.650 回答
0

我不认为你真的应该像现在这样轮询元素。

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

于 2009-01-21T01:19:44.667 回答
0

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


根据我的经验,IE6 中的“预期对象”错误是由于语法错误而出现的——如果你还没有将脚本放在JSlint中,这是值得的……

于 2009-01-21T08:02:18.380 回答