2014-02-19 40 views
1

我在頁腳中加載了jquery.min.js。只要在腳本包含之前文檔正文中沒有內聯jquery調用,它就可以正常工作。當jquery.js加載後,內聯jQuery腳本(在頁腳中)

例如,

<div><script>jQuery(document).ready(function(){//jQuery('anything')});</script></div> 

拋出一個錯誤:

Uncaught ReferenceError: jQuery is not defined (index):63 (anonymous function)

線63被引用聯腳本。 jquery.js包含在此引用之後的頁腳中。有沒有什麼辦法讓這個工作,離開jQuery在頁腳?

+1

不,必須先加載jQuery,然後才能使用任何jQuery。 – j08691

+0

這是有道理的。那麼,這個腳本是否可以使用原生javascript調用來確定document.ready何時被觸發,然後在那裏包裝jQuery調用? – RegEdit

回答

1

錯誤很明顯,jQuery沒有定義,因此無法使用。最簡單的解決方案是在調用內聯代碼之前加載jQuery庫。

如果你絕對不能,你將不得不使用不同的東西比jQuery(document).ready(...)也就是說,其本身不是一個簡單的事情,需要一些認真思考(take a look at this SO question for some ideas

我注意到你正在使用jQuery(document).ready(...)而不是$(document).ready(...)你有不同的框架裝好(MooTools的,原型等?)如果是這樣(和這些庫被更早加載),你可以簡單地鉤到他們相當於jQuery(document).ready(...)

+0

腳本從第三方插件加載。我只是想處理它,打破了我從頭到腳的腳本移動方法。 – RegEdit

+0

在這種情況下,如果您無法編輯代碼,那麼您無法在頁腳中保留jQuery。我知道越來越成爲最好的實踐,把你的大腳本放在頁面的最後,但聽起來你沒有這種奢侈。 –

1

我創建了一個簡單的墊片正是因爲這個原因。它創建一個全局jQuery(和$)對象,它們只能爲domReady排隊。它非常小,所以你可以將它內聯到HEAD標籤中(內聯以避免整個dns查詢,延遲等問題),然後按照你描述的方式編寫的正文中的任何代碼仍然可以正常工作。

https://github.com/withjam/jqshim-head

墊片基本存儲所有傳遞給jQuery的()或jQuery的()的功能。就緒(),等待真正的jQuery爲可供,然後將它們傳送到真正的jQuery()調用繼續進行isDomReady循環。

讓我知道是否有幫助。

+0

工程很好! – IJas