2015-02-06 78 views
0

我正在使用需要幾個JavaScript文件的引導主題。在我的一些頁面上,我加載了很多來自服務器的內容,這意味着在評估javascript文件時,並不是所有的html都會出現在頁面上。延遲js加載的最佳方法?

這可以防止事件處理程序綁定到javascript評估後加載的html。到目前爲止,我已經通過在ajax調用完成後加載腳本解決了這個問題,但是這對我來說似乎很麻煩。這裏是我的功能:

$.get("/path/to/rest/call", function(data) { 
    $('#htmlElement').html(data); 
}).done(function() { 
    $.getScript("/path/to/js/file.js"); 
}); 

我覺得有更好的方法來做到這一點。在那兒?

+1

對我來說沒什麼好笑的。當頁面準備好該腳本時加載腳本。這就是你應該如何去做的。您可以更改腳本,以便在加載時不執行任何操作,然後您可以隨時加載它。然後,當你的ajax調用完成時,你只需在該腳本中調用一個函數。這可以簡化很多事情,因爲當腳本從其中的函數被調用並執行時加載時會解耦。 – jfriend00 2015-02-06 23:06:12

+0

我想你是對的,但我正在加載的腳本是第三方庫。我寧願不去改變它以適應我的需求。 – jasono 2015-02-07 04:31:21

+1

因此,您有第三方庫試圖直接修改您的頁面,而無需調用任何內容。這很奇怪。它是什麼庫? – jfriend00 2015-02-07 04:57:24

回答

1

與動態加載metroui庫相比,可能有更簡單的解決方法。它看起來像取決於jQuery的.ready()知道何時加載頁面以及何時可以初始化它的東西。但是,這不適合你,因爲你是通過Ajax動態加載內容的。

你可以做的是你可以拖延jQuery的ready()通知,直到你的ajax內容被加載。這會阻止地鐵初始化的觸發,直到您的動態內容加載完成。這將允許您像他們的文檔所示,在<head>部分的股票<script>標記中載入地鐵。這種工作方式是你將它添加到了<head>部分,加載的jQuery後:

<script> 
    jQuery.holdReady(true); 
</script> 

然後,你的後Ajax代碼已經成功地完成了,你這樣做(從成功處理程序,你已經把你的後新內容到頁面):

jQuery.holdReady(false); 

,然後釋放jQuery來調用它的.ready()處理程序和地鐵會做的事情你的內容加載後。

請參閱jQuery doc對於jQuery.holdReady(...)

+0

我喜歡這種方式,謝謝。 – jasono 2015-02-08 01:35:56