2013-07-18 56 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,但在包含它之前您已嘗試使用$。