如果在所有页面 HTML 之后加载 jQuery 脚本,它们是不是仍然需要 $(document).ready?
Posted
技术标签:
【中文标题】如果在所有页面 HTML 之后加载 jQuery 脚本,它们是不是仍然需要 $(document).ready?【英文标题】:Do jQuery scripts still need $(document).ready if they are loaded after all of the page HTML?如果在所有页面 HTML 之后加载 jQuery 脚本,它们是否仍然需要 $(document).ready? 【发布时间】:2012-05-10 16:35:03 【问题描述】:如果我在所有页面 html 下方加载我的 jQuery 脚本,我是否还需要等待 $(document).ready
才能使用 jQuery 来查找页面中的元素?
【问题讨论】:
“技术上”,是的——“实际上”,不是。多年来,这一直是浏览器的一致(未定义)行为。但是,我相信ready
和 IE 中的框架可能会有一些魔力......脚本仍然应该在 inside 正文标记中。
另外,“页脚”是指<footer>
或<body>
的末尾还是...?
jquery - Is $(document).ready necessary? 的可能重复项
【参考方案1】:
您确实不需要使用 jQuery 的ready
函数,但您的代码必须牢记这一点。任何 click
或其他基于绑定的处理程序可能无法正确附加到选择器,但是,live
和 $.ajax
等其他处理程序可能会按预期运行。
在使用脚本加载器或 AMD 使用这种方法时要小心。 jQuery 必须 可用并且加载时必须阻塞。在 head 中加载 jQuery 和其他 dep。
很好地了解了这种技术,它描述了这对于 jQuery 的功能来说并不是必需的(不一定是关于在页脚中的使用):
http://encosia.com/dont-let-jquerys-document-ready-slow-you-down/
【讨论】:
(该链接谈到在 HEAD 位置使用脚本,但不是在 FOOT 位置使用脚本。) 它适用于执行前 DOM 中可用的任何内容。之后通过任何方式加载的任何内容,例如 ajax 或在后续文档更改中添加的内容都不会被 jQuery 的click
拾取
但是ready
如何解决这个问题(通过脚位脚本)?
在这些示例中,他们使用 live
和 ajax
,而不是依赖于 DOM。我会更新文章。
@pst ready
是一个事件,它告诉浏览器在加载 dom 之前不要运行脚本。所以如果它在头部,它不会运行,直到身体的其余部分都被加载。【参考方案2】:
不,如果脚本位于这些元素下方,则与页面上的 DOM 元素交互的任何代码都不需要 $(document).ready
。
最好将它们放在结束 </body>
标记之前。
【讨论】:
HTML 标签只有两个有效的子标签,head 和 body,所以我可能会说将脚本标签放在结束的 body 标签内不仅仅是一个好习惯。无效的 HTML 解析器可能会很奇怪【参考方案3】:否,因为文档已经加载。 Dom 从上到下加载。我个人喜欢把我所有的js放在页面底部而不是头部。
但是它只有 1 行代码,我建议使用它只是为了安全。你也可以让它更短。 $(function()
与$(document).ready(function())
相同
【讨论】:
我不明白你为什么要使用它只是为了安全;听起来这会不必要地减慢执行速度。 因为总会有一些浏览器配置失败的人,如果它看不到它想要或期望的东西。运行$(function()
一次并不会减慢速度到足以让您关心的程度。查看 ***.com/questions/8160014/… 并阅读 cmets 以获取已接受的答案。使用$(function()
平均需要大约 2-3 毫秒。附带说明一下,如果您使用 php,您可以创建一个函数或类将所有 js 放入 1 $(function()
的 1 个文件中,或者您可以在 js 中执行此操作。研究编程设计模式。以上是关于如果在所有页面 HTML 之后加载 jQuery 脚本,它们是不是仍然需要 $(document).ready?的主要内容,如果未能解决你的问题,请参考以下文章
我想用JS HTML CSS JQuery创建一个预加载屏幕(可选),没有后端
jquery+ajax实现查询数据时,JSP页面显示“正在加载中...” ,查询完了之后在页面显示查询出来的数据。
如果在 Jquery 加载页面时在网格中禁用了所有复选框,则如果没有选中复选框并禁用按钮,则发出警报