IE6中jQuery $(document).ready()失败
我有以下代码:
// 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完全被这一点加载。
这是一个已知的问题?
对于任何有兴趣的人来说,只需几点
$(document).ready(function() {...});
和$(function() {...});
意思完全相同。 后者是前者的简写。
如果您为大型站点开发,使用多个Javascript库,或者您开发的插件旨在与其他人的工作兼容,则您不能相信与jQuery对象关联的美元符号($)。 使用以下表示法是安全的:
(function($) { [your code here] })(jQuery);
这会将jQuery传递给自动执行的函数,并将$与此函数中的jQuery对象相关联。 那么$在你的函数之外代表什么并不重要。
要回到您的问题,您是否检查了在收到错误时是否分配了计时器变量? 我相信浏览器会看到$(document).ready(function() {...});
所有作为一行,所以如果你有某种调试器告诉你这是违规行,它可能是定时器变量…
最后一件事:在Javascript中,在新行上放置大括号是不正确的。 由于Javascripts分号插入,这可能会导致非常糟糕的错误。 有关详细信息,请阅读Douglas Crockford的Javascript:好的部分:
无论如何,真的希望我没有让任何人感到不安。 希望你解决问题!
编辑:我不确定这是罗伯茨完全合格的意思,但据我所知,当一个URL完全合格时,它意味着没有任何部分丢失,即。 它是以http://或https://(或其他一些协议)开头的绝对URL。 如果我错了请纠正我!
我过去也遇到过同样的问题。 这是一个零星的问题,很可怕并且重现。
我找到的解决方案是替换$(document).ready(function() {...});
使用jQuery(function() {...})
,它就像一个魅力!
移动$(document).ready(function() {...});
到底部不适用于我的用例。
这篇文章中的评论非常有帮助(我第一次读到这样做的方式)
如果有人遇到同样的问题你应该看看当你打电话给你的javascripts你有type="application/javascript"
,我消除了它并且它被纠正了,我认为这是IE和类型Thing的一些问题
你确定加载了jQuery吗? 尝试使用以下警报调试:
alert(typeof $);
您还可以尝试不同的语法:
$(function() { clearInterval(timer); });
好的,所以从您的评论中,上述内容并没有帮助。 根据我的经验,语法错误似乎发生了“对象预期”错误。 这是你得到的确切代码吗? 如果没有,你可以发布吗?
如果它在你的body元素中的script元素中,(即)..
原因可以是您使用script-tag传递的属性。 如果是:
IE6可能会出错。 你应该用
然后错误就消失了。
确保您的脚本类型是text / javascript
DateTime选择器在我的本地XP测试中运行得很好,但是一旦部署在服务器上就失败了“Object Expected”。 经过2天的坚持,这就是我解决问题的方法,在Javascript路径周围添加了Url.Content!
我认为你不应该按照自己的方式轮询元素。
一旦浏览器加载到足以让您能够操作页面,文档就绪事件就会调用,因此您应该只在$(document).ready()
块中进行DOM处理。
您可以尝试使用旧的skool方法来检查文档是否“准备就绪”…将脚本放在结束 body>标记之前 – 我相信它与jQuery的’ready’事件具有相同的效果 – 实际上,它可能是这样做更快。
根据我的经验,IE6中的“对象预期”错误因为语法错误而出现 – 如果你还没有将它放到JSlint中是值得的…
我在我的机器上遇到了这个问题,因为能够找到快速修复。 这是我做的:
1.用nickf的建议“alert(typeof $)”调试我的javascript并得到“未定义”的警告信息
2.然后我完全限定了我的jQuery脚本资源。
3.Rooad我的页面并收到“function”警报消息
顺便说一下,我在XP上使用IIS 5.1。 我的网站配置为使用“通配符映射”来获取asp.net mvc框架的优势。 我认为这种配置导致链接断开。
有关如何在旧版本的IIS上设置MVC的更多信息,请查看Phil Haack的post: http : //haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough。 ASPX
$(document).ready()告诉你dom何时准备就绪,但并非所有资产都必须完成。
如果要确保所有资产实际上都已完成加载,请改用$(window).load() 。 最常见的用途是确保图像加载完成,但它也可能适用于您的脚本问题。
我遇到了同样的问题,脚本错误告诉我该对象未定义。 我尝试了这里列出的所有建议但没有用。 我唯一没考虑的是安全性,我忘记了所有关于我的表单身份validation的事情,结果我忘记了脚本文件夹上的授权,该文件夹拒绝访问jQuery库!
希望这可以帮助。