在某些情况下,由于下载速度或其他异步问题,即使我在包含jquery.js之后添加$(document).ready()
,我也会不时抱怨$
是{{1} }。等等等等。
我不想这样做:
undefined
看起来非常蹩脚。
那么,有没有一种聪明的方法或正确的方法或好方法来确保document.ready真的可以被称为? :)
答案 0 :(得分:4)
我认为这实际上是不可能的,(事实$
将是undefined
),文档头同步加载意味着每行在下一行之前完全加载
这里有一个视频,这个确切的测试放在测试上,看起来我是正确的
视频:http://www.bennadel.com/blog/1915-How-Javascript-Loading-And-Blocking-Works-By-Default.htm
您是否正确加载文件,例如
<!DOCTYPE html>
<html>
<head>
<title>...</title>
<script type="text/javascript" src="...."></script>
<script type="text/javascript" src="...."></script>
<script type="text/javascript" src="...."></script>
<script type="text/javascript" src="...."></script>
<script type="text/javascript">
jQuery.ready(function(){
//This is executed once all 4 above have been loaded
});
</script>
<script type="text/javascript" src="...."></script>
<script type="text/javascript" src="...."></script>
<!-- The above to scripts are loaded in order after the jquery function has run. -->
</head>
</html>
加载孔文档后,jQuery 仅的ready
方法会被触发,直到DOM看到最终结束标记,通常是</html>
[引用需要
说过它是不可能的,有可能在IE8或更低版本,原因是因为IE可能是有史以来最糟糕的浏览器,但是他们说IE9已经完全进行了大修,应该满足喜欢谷歌,苹果,Mozilla等
如果您使用多个库或覆盖$
变量,您可以在锁定范围内获取它,如下所示:
(function($){
$.ready(function(){
//Do your jQuery here !
});
})(jQuery)
答案 1 :(得分:2)
您可以通过执行来检查是否加载了jQuery。
if (typeof jQuery !== 'undefined') {
//do whatever here
}
您不必这样做。最好在HTML结束时和</body>
之前包含所有JavaScript,jQuery是第一个。这是雅虎推荐的方法。您可以在http://developer.yahoo.com/performance/rules.html了解更多信息。这不会减慢页面加载速度,也不会给你带来未定义jQuery的问题。
答案 2 :(得分:2)
Denis提供了一个很好的解决方案链接。我现在正在使用它。
JavaScript - How do I make sure a jQuery is loaded?
请参阅链接中的答案和解释。
解决方案是:
<script type='text/javascript'>
runScript();
function runScript() {
// Script that does something and depends on jQuery being there.
if( window.$ ) {
// do your action that depends on jQuery.
} else {
// wait 50 milliseconds and try again.
window.setTimeout( runScript, 50 );
}
}
</script>