2011-08-10 16 views
1

我正在爲客戶端重新構建一個頁面,並且我在頁面上實現了jQuery代碼時遇到了一些問題。
有一個使用Prototype的彈出式燈箱,它在頁面加載時出現,然後在頂部和右側放置了選取框/滾動條,我使用了jQuery。我真的不確定導致錯誤的原因。
我對jQuery的noConflict很熟悉,但我已經在本頁面上嘗試了幾乎所有的變體,並且仍然出現錯誤 - 幾秒鐘後,停止了marquees - 並且IE顯示「頁面錯誤」對話框,參考線464(「陣列長度必須分配一個有限的正數」)。
這裏是頁:-link由作者 -
去除。這裏是的prototype.js:-LINK由作者 -


刪除我完全不知道是什麼原因造成這個錯誤,JavaScript是不是我的最強側。jQuery和原型 - 碰撞導致破壞功能

+0

你可能可以搞定它,但我敢打賭,只需在jquery中找到一個彈出式燈箱或原型中的一個選取框並僅使用其中一個庫,就會更容易。他們對於共同合作可能會非常不利。那就是說,你的問題可能與你調用的範圍,以及你包含你的庫和插件的順序有關。 – Ken

+0

我可能會這樣做,但如果我可以解決這個問題,那麼我寧願繼續使用jQuery,因爲我對它更熟悉。 另外,包括庫和插件的順序應該是什麼?並請原諒我的無知,但我的呼叫的範圍是什麼? –

回答

2

當我第一次看到這個錯誤時,我一直在尋找更通用的「Prototype + jQuery」錯誤,當時我應該一直在尋找特定於我正在處理的確切問題的解決方案。
添加術語「數組長度」和「行464」,其實導致我解決這個特定的問題,那就是:

  1. 從原型V1.4更新至v1.5.1.2( v1.7,最新版本, 沒有正常工作,甚至產生了堆棧溢出錯誤)。
  2. 變卦了腳本的秩序,改變noConflict:

    <script src="/scripts/jquery-1.5.2.js" type="text/javascript"></script> 
    <script src="/scripts/jquery.Scroller-1.0.src_4.js" type="text/javascript"></script><!-- all _$_'s replaced with _jQuery_ --> 
    <script type="text/javascript"> 
    <!-- 
    // more jquery, all $'s replaced with jQuery 
    --> 
    </script> 
    <script type="text/javascript"> 
    <!-- 
    jQuery.noConflict(); 
    --> 
    </script>  
    <script src="scripts/prototype-1.5.1.2.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
    <!-- 
    // everything else, including prototype scripts 
    --> 
    </script> 
    

就是這樣!現在我沒有收到「Line 464」錯誤,所有腳本都正常工作。 謝謝@Ken和@Diodeus爲我帶來解決方案。

+0

謝謝里克,你今天救了我的命。 –

0

我會在同一個庫中找到插件。 jQuery有你提到的所有插件,所以沒有必要嘗試使用兩者。這兩個圖書館很難一起工作。

如果你使用這兩個庫設置,試試這個排序:
1)其他的lib
2)jQuery的
3)noconflict調用
4)所有的插件

<script src="scripts/prototype.js" type="text/javascript"></script> 
<script src="/scripts/jquery-1.5.2.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
<!-- 
    $.noConflict(); 
--> 
</script> 
<script src="/scripts/jquery.Scroller-1.0.src_3.js" type="text/javascript"></script> 
<script src="scripts/lightbox.js" type="text/javascript"></script> 
+0

我試着按照這個順序放置腳本,並且用'jQuery'替換了'$',就像@Diodeus說的那樣...仍然會出現同樣的錯誤。 我會使用全部jQuery,但在開始更改事物之前,網站上正在使用腳本,並且我寧願保留這些腳本。 –

2

您可能需要通過插件並將$(替換爲jQuery(,因爲您需要在無衝突模式下使用「jQuery ...」而不是「$ ...」。

+0

所以基本上我使用的任何jQuery代碼 - 我應該用'jQuery'代替'$'? –

+0

是的。在插件中這樣做,因爲它們可能不是在考慮「無衝突」的情況下製作的。 –

+0

有沒有一種方法可以找到導致錯誤的確切腳本/行?在prototype.js中提到的Line 464 IE並沒有告訴我很多 - 只有(或許)它與'.extend'有關,但是這並沒有說明什麼。 如果我能找到問題的根源,它會使修復更容易。 –

2

環繞使用jQuery的與

(function ($) { 
... // Your code 
})(jQuery) 

這樣,它使用本地$這勢必jQuery和和jQuery唯一的代碼。

在同一個網站上使用這兩個框架也被認爲是一個壞主意。幾乎所有的Prototype插件都可以找到jQuery替代品。