2013-07-18 40 views
25

下面的代码,我得到一个错误:$ is not defined。我的问题是:如何可能?

... 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $(function() { 
      $('#cb').click(function() { 
       if (this.checked) { 
        $('div#div').slideDown(); 
       } else { 
        $('div#div').slideUp(); 
       } 
      }); 
     }) 
    }); 
</script> 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

@Scripts.Render("~/Scripts/jquery-1.7.1.min.js") 
@Scripts.Render("~/Scripts/jquery-ui-1.8.20.min.js") 

我们可以看到,它正确加载所有的脚本:

<script src="/Scripts/jquery-1.7.1.min.js"></script> 
<script src="/Scripts/jquery-ui-1.8.20.min.js"></script> 
<script src="/Scripts/jquery-1.7.1.js"></script> 
<script src="/Scripts/jquery.unobtrusive-ajax.js"></script> 
<script src="/Scripts/jquery.validate.js"></script> 
<script src="/Scripts/jquery.validate.unobtrusive.js"></script> 

如何解决呢?

回答

50

您放置脚本在视图体和Scripts部分这是它所属的后引用的jQuery里面没有:

@section Scripts { 
    @Scripts.Render("~/Scripts/jquery-1.7.1.min.js") 
    @Scripts.Render("~/Scripts/jquery-ui-1.8.20.min.js") 
    @Scripts.Render("~/bundles/jqueryval") 

    <script type="text/javascript"> 
     $(function() { 
      $('#cb').click(function() { 
       if (this.checked) { 
        $('div#div').slideDown(); 
       } else { 
        $('div#div').slideUp(); 
       } 
      }); 
     }); 
    </script> 
} 

也是一个避免引用的jQuery两次(在你的情况下)请仔细检查您是否已将其作为捆绑包存入您的_Layout

最后一句话:因为默认情况下脚本被包含在DOM的末尾,就在关闭body标签之前,您不需要将脚本包装到$(document).ready中,仅仅是因为在执行时DOM将被加载。你的代码更糟糕,因为你有两次。请记住$(function() { ... });相当于$(document).ready(function() { ... });,在你的情况下,当你实际上不需要任何这些东西时,你已经嵌套了2个这样的东西。

所以:

@section Scripts { 
    @Scripts.Render("~/Scripts/jquery-1.7.1.min.js") 
    @Scripts.Render("~/Scripts/jquery-ui-1.8.20.min.js") 
    @Scripts.Render("~/bundles/jqueryval") 

    <script type="text/javascript"> 
     $('#cb').click(function() { 
      if (this.checked) { 
       $('div#div').slideDown(); 
      } else { 
       $('div#div').slideUp(); 
      } 
     }); 
    </script> 
} 
+0

达林一如既往:)谢谢! – whoah

+1

我的诀窍是实际上把它放在@sections脚本里面,而不是之前!谢谢 – Worthy7

3

你包括jquery两次。

<script src="/Scripts/jquery-1.7.1.min.js"></script> 
<script src="/Scripts/jquery-ui-1.8.20.min.js"></script> 
<script src="/Scripts/jquery-1.7.1.js"></script> 

第一个和最后一个js文件是相同的,除了一个被缩小,另一个可能不是。删除非缩小的,它应该为你工作。

+0

它是不是一个问题 - 如果我包括jQuery的只有一次,有同样的问题 – whoah

+3

你也应该加载jQueryUI的库(如果去掉分钟)之前加载jQuery的... –

4

直到页面结束,您才会包含jQuery JS,但在包含它之前您已尝试使用$。