如何在jQuery.js可用之后确保$(document).ready运行?

时间:2011-03-22 18:27:08

标签: jquery document-ready

在某些情况下,由于下载速度或其他异步问题,即使我在包含jquery.js之后添加$(document).ready(),我也会不时抱怨$是{{1} }。等等等等。

我不想这样做:

undefined

看起来非常蹩脚。

那么,有没有一种聪明的方法或正确的方法或好方法来确保document.ready真的可以被称为? :)

3 个答案:

答案 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>