2010-06-05 100 views
2

我得到一個JS錯誤,因爲我的$(function() {...})處理程序在加載必備插件腳本之前似乎正在觸發。只發生在IE中(在IE7中測試)。

我在<head>一些HTML,看起來像這樣:

<script type="text/javascript" src="../resources/org.wicketstuff.jwicket.JQuery/jquery-1.4.2-special.js"></script> 
... 
<script type="text/javascript" id="noConflict"><!--/*--><![CDATA[/*><!--*/ 
jQuery.noConflict(); 
/*-->]]>*/</script> 
... 
<script type="text/javascript" src="../resources/com.csc.aims.wicket.components.collapsiblefieldset.CollapsibleFieldsetBehavior/jquery.collapsiblefieldset.js"></script> 
<link rel="stylesheet" type="text/css" href="../resources/com.csc.aims.wicket.components.collapsiblefieldset.CollapsibleFieldsetBehavior/jquery.collapsiblefieldset.css" /> 
<script type="text/javascript"> 
jQuery(function(){ 
jQuery('#collapse119').collapse({"iconClosedUrl":"../resources/img/white_plus","iconOpenUrl":"../resources/img/white_minus"}); 
}); 
</script> 

所以注意順序,根據HTML代碼,如下:

  1. jQuery的1.4.2- special.js
  2. jQuery.noConflict()調用
  3. jquery.collapsiblefieldset.js //定義$ .fn.collapse
  4. jquery('#collapse119')。collapse(...)被調用

當這段代碼在FF中運行時,一切正常。當我在IE7(或IE8 w/Compat。View:IE7標準模式)中測試它時,我得到一個javascript錯誤。調試器顯示我jQuery.fn.collapse未定義。

使用IE8開發人員工具,我嘗試查看jquery.collapsiblefieldset.js。我在列表中看到腳本,但該工具告訴我,由於腳本未加載,因此無法設置斷點。

爲什麼collapsiblefieldset.js在我的$()就緒處理程序運行之前沒有加載?任何有識之士將不勝感激!謝謝。

回答

4

您使用

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

這是

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

取而代之的代名詞,你可以嘗試

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

後來大火的頁面加載順序。

+0

謝謝!這似乎很有前途;我會在星期一嘗試一下 – RMorrisey 2010-06-05 19:00:17

+1

我誤以爲這是一個時間問題。我得到的錯誤掩蓋了實際問題,這是有問題的外部.js文件中的語法錯誤。將命令腳本分配給窗口加載事件似乎已經暴露了底層問題。 – RMorrisey 2010-06-07 15:51:16

1

將所有腳本放在頁面底部,就在</body>標記之前。

如果這樣不能解決問題,請將看起來未加載的腳本及時移回到<head>,並將其餘腳本保留在底部。

+0

我使用的Web框架不容易讓我把它放在的底部。我對其進行了更改,以便collapsiblefieldset.js位於中,並且jQuery就緒處理程序在正文中定義小部件的位置處於關閉狀態。這似乎不能解決問題。 – RMorrisey 2010-06-05 01:07:45

+0

此外,還有很多其他腳本可以在此頁面上運行;其中最昂貴的發生在$()準備好的處理程序中。不確定這是否相關。 – RMorrisey 2010-06-05 01:09:02

+0

看起來您將不得不使用IE8中的開發人員工具來嘗試和調試Javascript代碼。 http://coolwebdeveloper.com/2009/03/fantastic-new-javascript-debugging-tool-with-ie-8-and-its-list-of-features-hard-to-live-without/ – 2010-06-05 01:23:43

0

對於任何患此問題的人來說,可能值得仔細檢查一下,您沒有多個對jQuery的引用。如果你在頭部定義了插件,那麼它們會被正文中的第二個jQuery調用覆蓋。

相關問題