2014-01-18 37 views
3

我有一個關於延遲加載sciprts的問題。在MVC中的jquery後加載延遲內聯腳本

所以基本上只是告訴你我的情況:

我有一個頁面,在頁面我加載jQuery和其他一些腳本結束時,讓所有的HTML被加載第一才把腳本將開始加載。

但是在我的網頁上的一些地方,我有責任編寫一些內聯腳本,這些腳本需要使用jQuery的東西,比如$ ...,如果找不到,我會得到一個錯誤。

我不能將該內聯腳本放在seperat js文件中,並在最後加載它,因爲在mvc中,我不能接近模型內容並從控制器調用操作。

那麼有沒有辦法像jquery之類的負載說一些東西?

+0

你是否將你的調用包裝在jquery ready函數中? http://api.jquery.com/ready/ –

+0

@JaceRhea但他還沒有加載jquery .. –

+0

但如果我做$(document).ready(function(),生病得到一個錯誤,因爲$這不是已知:( – Alnedru

回答

0

只需在javascript文件最底部的html頁面的window.onload事件上指定一個方法即可。

window.onload = function() 
{ 
    do your jQuery thingies here. 
} 

window.onload事件在所有頁面資源(包括外部css和js文件)已被瀏覽器下載後觸發。

更新:請將所有內聯腳本放在html5頁面的底部,這是一個很好的做法。另外,把所有的JavaScript文件放在一個單獨的JS文件中會給你帶來諸如javascript的縮小和外部js文件緩存到瀏覽器等優點,從而縮短加載時間。

+1

OP提到多個行內腳本使用..這種方式每個會覆蓋以前.. –

+0

@ GabyakaG.Petrioli感謝提醒:) –

0

這是我在頭部加載jQuery不可取或不可行的情況下的解決方案。

它涉及在頭部聲明臨時$函數,該函數收集使用jQuery-esque語法進行內聯發生的任何函數。

真正的jQuery然後加載並覆蓋window.$,但留下了存儲在var inlines中的函數數組,然後可以在jQuery可用時處理這些數組。

<html> 
    <head> 
     ... 
     <script> 

     var inlines = []; 

     window.$ = function(inline) { 
      inlines.push(inline); 
     }; 

     </script> 

    </head> 
    <body> 
     ... 


     <script> 

      $(function() { 
       // Do some jQuery stuff. 
      } 

     </script> 

      ... 
     <script... load jQuery here!! ></script> 
     <script> 
      for(var i = 0; i < inlines.length; i++) { 
       inlines[i](); 
      } 
     </script> 
    </body> 
</html> 

我也已經成功地將這種方法應用於內聯require.js在加載依賴關係之前需要調用。