当同一 HTML 页面上使用的两个 JavaScript 文件中有两个 jQuery $(document).ready 调用时会发生什么?
我有一个关于 jQuery $(document).ready
的问题
假设我们有一个 HTML 页面,其中包含 2 个 JavaScript 文件
<script language="javascript" src="script1.js" ></script>
<script language="javascript" src="script2.js" ></script>
现在假设在这两个脚本文件中,我们都有 < code>$(document) 如下
script1.js 内部:
$(document).ready(function(){
globalVar = 1;
})
script2.js 内部:
$(document).ready(function(){
globalVar = 2;
})
现在我的问题是:
- 这两个就绪事件函数都会被触发吗?
- 如果是,他们被解雇的顺序是什么? 文件将同时准备好 他们俩都有时间吗?
- 是否推荐使用这种方法,或者我们理想情况下应该只有 1 个 $(文档).准备好了吗?
- 所有浏览器(IE、FF 等)的执行顺序是否相同?
谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
是的,他们都会被解雇。
它们出现的方式(从上到下)是因为就绪事件将被触发一次,并且所有事件侦听器将相继收到通知。
这样做就可以了。如果可以将它们放在同一个块代码中,管理起来会更容易,但仅此而已。 更新:显然我忘了提及,如果您在多个文件中执行此操作,则会增加 JavaScript 代码的大小。
是的,因为 jQuery 实现了跨浏览器标准化。
Yes, they will both get fired.
In the way they appear (top to bottom), because the ready event will be fired once, and all the event listeners will get notified one after another.
It is OK to do it like that. If you can have them in the same block code it would be easier to manage, but that's all there is to it. Update: Apparently I forgot to mention, you will increase the size of your JavaScript code if you do this in multiple files.
Yes, because jQuery takes the cross-browser normalization at hand.
请参阅此处: jQuery - 拥有多个 $(document ).ready(function() {}); 和此处: 教程:多个 $(document).ready()
延迟
对象。.js
文件,并确保它提供并绑定自己的就绪处理程序)。See here: jQuery - is it bad to have multiple $(document).ready(function() {}); and here: Tutorials:Multiple $(document).ready()
readyList
withDeferred
objects..js
file and be sure that it provides and binds its own ready handler).在任何当前浏览器中,您可以指望两个处理程序都按照脚本包含的顺序执行,并且在第二个脚本引用之后
globalVar
为2
。You can count on both handlers being executed in order of their script inclusion and
globalVar
being2
after the second script reference, in any current browser.如果您想要完全控制,我强烈建议仅一个 $(document).ready();
如果您通过 ajax 加载 HTML 的部分部分,并且 ajax 响应包含 $(document).ready(); 脚本,并且您想要触发 $(document).ready();来自 ajax 回调中的 script1.js、script2.js 等。您必须复制大量代码...
祝您好运!
/ $(窗口).ready(); ;)
If you want full control I strongly recommend only one $(document).ready();
If you load partial portions of HTML through ajax and the ajax response includes a $(document).ready();-script and you want to fire $(document).ready(); from script1.js, script2.js and so on in the ajax callback.. You have to duplicate PLENTY of code....
Good Luck!
/ $(window).ready(); ;)
就相同的事件处理程序而言,老实说,我认为没有理由这样做,而且这只会让您的代码可读性更差。
as far as same event handlers, well, in all honesty, I see no reason why to do that, and it'll only make your code readability lousier.