我有一个页面,我在<head>
部分导入了大部分js。
但是,主页面有一些内联javascript。
在我在<head>
中导入的一个脚本中,我有$(document).ready...
,它使用页面上内联定义的一些JS变量。
据我所知,这正如我所期望的那样 - $(document).ready
使用内联定义的JS变量不会遇到任何错误。
但是,我收到了一些用户的报告,他们在$(document).ready
内的代码中看到“未定义”错误,其中我引用了页面内联定义的变量。
我怀疑这是浏览器特定的行为,但我不确定。我没有在文档中明确地找到这个,所以有人可以确认在$(document).ready
中从<head>
引入的{{1}}页面中使用内联定义的变量是否可行?
引用您的来源会使您的回答更可信。 :)
谢谢!
答案 0 :(得分:6)
引擎盖下:$(文件).ready()
正如您对John Resig所期望的那样,jQuery确定DOM何时就绪的方法使用各种优化。
例如,如果浏览器支持DOMContentLoaded事件(就像许多非IE浏览器那样),那么它将触发该事件。但是,在文档的readyState达到“完成”之前,IE无法安全地触发,这通常是晚些时候。
如果这些优化都不可用,window.onload将触发事件
来源:here
答案 1 :(得分:3)
为什么不在启动应用的“body”标记的末尾放置一个“脚本”标记 通过这样做,您确信一切就绪(跨浏览器和交叉库)。
<html>
...
<script>startApp('param');</script>
</body>
</html>
“startApp”是之前任何地方定义的函数,无论是内联还是“head”标记。
答案 2 :(得分:1)
$(document).ready()
针对不同的浏览器使用各种不同的方法。没有太多的浏览器同意如何处理这个事件,所以有很多方法可以测试它。我很确定jQuery实现,至少是IE hack,依赖于插入一个片段并检查它是否只有在DOM准备好后才存在的doScroll("left")
属性。这是一种无证的行为,可能会随着IE的新版本而改变。
$(document).ready()
的目的是允许您在页面加载完成之前运行与DOM相关的JavaScript,因为window.onload
在整个页面加载之前不会触发。
不同的实施方案也具有不同的可靠性水平。听起来好像其中一个浏览器在完成加载之前触发了脚本。
请记住,内联JavaScript的触发顺序不一定在ready
之前。听起来我应该将您的内联脚本合并到$(document).ready()
回调中。 jQuery做得最好,但并不完美。