2013-03-03 16 views
1

我和其他許多開發人員一樣,我習慣於在<head>標記或視圖頁面中的''標記中編寫更小的內聯腳本塊。現在我的頭看起來像這樣,爲什麼jQuery包僅在新的MVC4 _Layout頁面的底部呈現?

<head> 
    <title>Simple Demo</title> 
    <script> 
     function setCheckCheckboxState(checkbox, state) { 

     } 

     $(function() { 

      $("#tri-state").prop("indeterminate", true); 
     }); 
    </script> 
</head> 

雖然代碼運行正常出於某種原因,在Chrome開發者控制檯,略高於$(function()電話,我得到的錯誤Uncaught ReferenceError: $ is not defined

現在我也不比如在嘗試調試代碼時看到與我的代碼無關的錯誤,因此我已將@Scripts.Render("~/bundles/jquery")移動到<head>標記中。爲什麼MS應該把它移到body之後,當我們都可以訪問一個幾乎本能的函數時,我們用它來在整個文檔加載後只調用任何jQuery代碼?

+0

最好在''標籤前面加'script'標籤。 http://stackoverflow.com/questions/436411/where-is-the-best-place-to-put-script-tags-in-html-markup – 2013-03-03 07:02:15

回答

2
+0

除了性能部分,它也非常方便地把腳本,特別是底部的jQuery,所以在DOM的其他部分已經完全加載後纔會呈現它們。它只是讓事情更加可靠。並且在加載頁面的其他部分之前,您沒有太多的需要JS的地方。 – gligoran 2013-03-03 10:12:52

1

jQuery腳本必須在使用jQuery的任何函數之前聲明。

此代碼需要在jQuery腳本引用後調用,以解決您遇到的Uncaught Reference錯誤。

$(function(){...}); 

根據最佳實踐(由Yahoo!和許多其他人完成),該腳本</body>標籤這就是爲什麼MS選擇了用這種方法在年底前加入。從技術上講,文檔就緒函數$(function(){});應該是不必要的,因爲腳本已經在UI元素已經加載到DOM之後的頁面的底部。只是爲了安全措施,最好始終使用它。

<body> 
    <div id="content"></div> 
    @Scripts.Render("~/bundles/jquery") 
    <script type="text/javascript"> 
     $(function() { 
      .... 
     }); 
    </script> 
</body> 
相關問題