JS defer和jQuery ready事件

时间:2012-10-24 08:10:35

标签: jquery

我已将defer属性添加到我的jquery脚本中以提高网页性能,但现在我收到错误$ is not defined。我需要在页面加载时执行JS代码,所以我使用jQuery.ready事件但是在使用defer时它不起作用。

<head>    
    <script defer="defer" src="@Url.Content("~/Scripts/jquery-1.8.2.min.js")" type="text/javascript"></script>


    <script type="text/javascript">
        $(document).ready(function () {
          //MyLoadCode
        });
    </script>

</head>    

4 个答案:

答案 0 :(得分:2)

defer属性(如果存在)指定在页面完成解析时执行脚本。但是在页面完成解析之前你正在使用jquery变量$,那时jquery脚本没有被加载并且没有初始化$

而不是使用defer属性,将脚本标记从标题移动到页面底部,就在</body>标记之前。

<html>
    <head></head>
    <body>

        ... 

        <script src="@Url.Content("~/Scripts/jquery-1.8.2.min.js")" type="text/javascript"></script>


        <script type="text/javascript">
            $(document).ready(function () {
              //MyLoadCode
            });
        </script>
    </body>
</html> 

答案 1 :(得分:0)

如果您不希望脚本加载到最晚,则将jquery脚本移动到html页面的底部。然后它将最后加载。

答案 2 :(得分:0)

你需要确保在使用$之前加载jQuery,所以你不应该推迟加载jQuery。

如果你想推迟加载jQuery,你需要将你的javascript使用jQuery添加到脚本onload success事件处理程序中。

答案 3 :(得分:0)

你不能使用$(document).ready(function () {并等待DOM已加载,因为该语句是一个jQuery符号,它是deferred但尚未可用。因此,$变量只能在jQuery立即加载时使用。