Javascript jQuery - 多个 $(document).ready ...?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5263385/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
jQuery - multiple $(document).ready ...?
提问by rlb.usa
Question:
题:
If I link in two JavaScript files, both with $(document).ready
functions, what happens? Does one overwrite the other? Or do both $(document).ready
get called?
如果我链接两个 JavaScript 文件,都带有$(document).ready
函数,会发生什么?一个会覆盖另一个吗?或者两者都$(document).ready
被调用?
For example,
例如,
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script type="text/javascript" src="http://.../jquery1.js"></script>
<script type="text/javascript" src="http://.../jquery2.js"></script>
jquery1.js :
jquery1.js :
$(document).ready(function(){
$("#page-title").html("Document-ready was called!");
});
jquery2.js:
jquery2.js:
$(document).ready(function(){
$("#page-subtitle").html("Document-ready was called!");
});
I'm sure it is best practice to simply combine both calls into a single $(document).ready
but it's not quite possible in my situation.
我确信将两个调用简单地合并为一个是最佳实践,$(document).ready
但在我的情况下不太可能。
采纳答案by Praveen Prasad
All will get executedand On first Called first run basis!!
所有都将被执行并在第一次调用第一次运行的基础上!!
<div id="target"></div>
<script>
$(document).ready(function(){
jQuery('#target').append('target edit 1<br>');
});
$(document).ready(function(){
jQuery('#target').append('target edit 2<br>');
});
$(document).ready(function(){
jQuery('#target').append('target edit 3<br>');
});
</script>
DemoAs you can see they do not replace each other
Demo如您所见,它们不会相互替换
Also one thing i would like to mention
还有一件事我想提一下
in place of this
代替这个
$(document).ready(function(){});
you can use this shortcut
你可以使用这个快捷方式
jQuery(function(){
//dom ready codes
});
回答by cjastram
It is important to note that each jQuery()
call must actually return. If an exception is thrown in one, subsequent (unrelated) calls will never be executed.
需要注意的是,每次jQuery()
调用都必须实际返回。如果一个异常被抛出,后续的(不相关的)调用将永远不会被执行。
This applies regardless of syntax. You can use jQuery()
, jQuery(function() {})
, $(document).ready()
, whatever you like, the behavior is the same. If an early one fails, subsequent blocks will never be run.
无论语法如何,这都适用。您可以使用jQuery()
, jQuery(function() {})
, $(document).ready()
,无论您喜欢什么,行为都是相同的。如果早期的块失败,则后续块将永远不会运行。
This was a problem for me when using 3rd-party libraries. One library was throwing an exception, and subsequent libraries never initialized anything.
在使用 3rd 方库时,这对我来说是一个问题。一个库抛出异常,后续库从未初始化任何内容。
回答by Ed Fryed
$(document).ready(); is the same as any other function. it fires once the document is ready - ie loaded. the question is about what happens when multiple $(document).ready()'s are fired not when you fire the same function within multiple $(document).ready()'s
$(文件).ready(); 与任何其他功能相同。一旦文档准备好 - 即加载,它就会触发。问题是当多个 $(document).ready() 被触发时会发生什么,而不是当你在多个 $(document).ready() 中触发相同的函数时会发生什么
//this
<div id="target"></div>
$(document).ready(function(){
jQuery('#target').append('target edit 1<br>');
});
$(document).ready(function(){
jQuery('#target').append('target edit 2<br>');
});
$(document).ready(function(){
jQuery('#target').append('target edit 3<br>');
});
//is the same as
<div id="target"></div>
$(document).ready(function(){
jQuery('#target').append('target edit 1<br>');
jQuery('#target').append('target edit 2<br>');
jQuery('#target').append('target edit 3<br>');
});
both will behave exactly the same. the only difference is that although the former will achieve the same results. the latter will run a fraction of a second faster and requires less typing. :)
两者的行为完全相同。唯一不同的是,虽然前者会达到同样的结果。后者的运行速度会快几分之一秒,并且需要更少的输入。:)
in conclusion where ever possible only use 1 $(document).ready();
总之,在可能的情况下只使用 1 $(document).ready();
//old answer
//旧答案
They will both get called in order. Best practice would be to combine them. but dont worry if its not possible. the page will not explode.
他们都将按顺序被调用。最佳实践是将它们结合起来。但如果不可能,请不要担心。页面不会爆炸。
回答by Diodeus - James MacFarlane
Execution is top-down. First come, first served.
执行是自上而下的。先到先得。
If execution sequence is important, combine them.
如果执行顺序很重要,请将它们组合起来。
回答by Scoobler
Both will get called, first come first served. Take a look here.
两者都会被调用,先到先得。看看这里。
$(document).ready(function(){
$("#page-title").html("Document-ready was called!");
});
$(document).ready(function(){
$("#page-title").html("Document-ready 2 was called!");
});
Output:
输出:
Document-ready 2 was called!
文档就绪 2 被调用!
回答by Arlo Guthrie
Not to necro a thread, but under the latest version of jQuery
the suggested syntax is:
不是要死掉一个线程,而是在jQuery
建议语法的最新版本下:
$( handler )
Using an anonymous function, this would look like
使用匿名函数,这看起来像
$(function() { ... insert code here ... });
See this link:
请参阅此链接: