$(document).ready()会在body中的所有脚本文件加载完成后被调用吗?

7

你好!以下是您需要翻译的内容:

在加载body中的js文件后,$(document).ready()会被调用吗?

如果我把$(document).ready()放在head标签中的script元素里,并让它带有一个回调函数,该回调函数使用在body中加载的一个脚本元素中声明的函数,是否可行?例如:

<!DOCTYPE HTML>
<html>
<script src="jquery.js" type="text/javascript"></script>
<script>
$(function(){
hello();
})
</script>
<head>
</head>
<body>

<script src="http://somewhere/helloFuncDeclaration.js" type="text/javascript"></script>

</body>
</html>

这样做是否正确,并保证在调用hello()函数之前加载了helloFuncDeclaration.js文件?


1
$({ hello(); }) 是语法错误。 - rab
3个回答

4

为了确保,请使用window onload处理程序:

$(window).on('load', hello);

或者像这样使用它:
<script onload="hello()" src="http://somewhere/helloFuncDeclaration.js" type="text/javascript"></script>

但是它在加载所有图像后被调用,你认为使用load是一个好主意吗? - faressoft
一个好的想法是在helloFuncDeclaration.js文件中声明后调用hello()函数,或者使用此脚本标记的onload事件。 - A. Wolff
helloFuncDeclaration.js 可能是一些远程库,我想在自己的代码块中调用函数或声明一些对象... - faressoft
我已经使用了$(document).ready()来编写自己的jQuery代码。而对于所有广告脚本(如Google AdSense或其他提供商),我使用$(window).load()进行激活,这个方法效果很好! - basZero

2

确保的话,你可以使用window.load

$(window).load(function(){
   hello();
})

当一个元素及其所有子元素都完全加载完成时,会向该元素发送加载事件。此事件可以发送到与URL相关联的任何元素:图像、脚本、框架、内嵌框架和窗口对象。


1

$(document).ready() 在所有资产加载完成后运行,因此-是的


15
它在DOM准备就绪后运行,因此不会出现问题。 - A. Wolff
4
我不明白为什么这个答案被踩了。https://dev59.com/MEzSa4cB1Zd3GeqPmWqT 和 https://dev59.com/JVfUa4cB1Zd3GeqPLMda 明确指出,位于body标签内的 script 会在 ready 事件触发之前被加载。 - Jonwd
不,它是在下载DOM元素后调用的,而不是所有资源。 - HieuHT
这意味着脚本位于body标签内部。最好不要在body标签内部放置脚本。 - Shayne
这个答案是错误的,可能会导致JS中的错误。document.ready事件并不意味着body中的所有JS都已加载完成。 - Andrew Zhilin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接