我有以下代码:
// 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已经完全加载了。
这是一个已知问题吗?
答案 0 :(得分:15)
对于任何有兴趣的人来说,只需几点:
$(document).ready(function() {...});
和$(function() {...});
意味着完全相同的事情。后者是前者的简写。
如果您为大型网站开发,使用多个Javascript库,或者您开发的插件旨在与其他人的工作兼容,则您不能相信与jQuery对象关联的美元符号($)。使用以下符号表示安全:
(function($) { [your code here] })(jQuery);
这会将jQuery传递给自动执行的函数,并将$与此函数中的jQuery对象相关联。那么$在你的函数之外代表什么并不重要。
要回到您的问题,您是否在收到错误时检查了是否已分配计时器变量?我相信浏览器会将$(document).ready(function() {...});
all视为一行,所以如果你有某种调试器告诉你这是违规行,那么它可能是定时器变量......
最后一件事:在Javascript中,在新行上放置大括号是不正确的。由于Javascripts分号插入,这可能会导致非常糟糕的错误。有关详细信息,请阅读Douglas Crockford的Javascript:好的部分:
无论如何,真的希望我没有让任何人感到不安。希望你解决问题!
编辑:我不确定这是罗伯茨完全合格的意思,但据我所知,当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库!!!
希望这有帮助。