2012-12-05 42 views
3

我想要後期加載jQuery,但是我有少量的內聯JavaScript運行在$ .ready()上。由於沒有加載jQuery,這些行會引發錯誤,從不運行。有沒有一種方法可以使$ .ready()成爲一個可用的函數,但等到執行jQuery時才加載?

謝謝!

+0

功能替換願與函數調用,創建一個函數,並把該函數內部$。就緒() – lifetimes

+0

這是有用的? http://stackoverflow.com/questions/1828237/check-if-jquery-has-been-loaded-then-load-it-if-false – SpaceBison

回答

4

解決此問題的一種通用方法是將內聯JavaScript放入函數中,然後將該函數添加到全局可訪問的數組中 - 不要調用它。當document.ready可用時,這些基本上是您要爲document.ready()計劃的功能。

然後,當你加載jQuery時,你設置了一個循環遍歷該數組中所有函數並調用它們的處理函數(document.ready())。

// declare global at the top of your web page 
var readyFns = []; 

// in your inline code, add a function to the readyFns array 
readyFns.push(myInlineFn); 

// when your jQuery code loads, do this: 
$(document).ready(function() { 
    for (var i = 0; i < readyFns.length; i++) { 
     readyFns[i](); 
    } 
}); 

如果你想使用匿名函數,你可以做中間步驟是這樣的:

// in your inline code, add a function to the readyFns array 
readyFns.push(function() { 
    // put your code here 
}); 
+0

我喜歡這個,我認爲它會工作。但有沒有辦法做到這一點與jQuery的匿名函數呢? readyFns.push(function(){});也許? – Beachhouse

+1

@Beachhouse - 我在我的答案中添加了匿名函數。 – jfriend00

1

使用.ready的相反,你可以使用非jQuery的等同物如window.onload,但這些往往與.ready有些不兼容,所以我不確定他們是否會滿足您的需求。

有人顯然已經提取jQuery的ready功能,因此它可以單獨使用:http://code.google.com/p/domready/

+0

+1 domready可能是我正在尋找的東西,但代碼看起來像在那裏有一些開銷來做到這一點。 – Beachhouse

1

你應該:

  1. 更換願與函數調用如example();
  2. 創建一個功能,例如example() { }
  3. 把那裏面(document).ready()
+0

非常非常簡單的答案,但我需要檢查這將如何工作。我在DOM之前加載了多個ready塊,我認爲這會將我限制爲一種用法。 – Beachhouse

相關問題