2011-06-04 81 views
3

因此,我正在開發一個平臺,每次加載頁面時都會注入jQuery-1.2.6。我開發了我的頁面來使用jQuery-1.4.2,所以當我的頁面加載時,我的頁面上有2個jQuery實例。jQuery noConflict()問題

爲了避免發生衝突,我已經包括在我的JS文件下面一行是超出了我的頁面:

var mc$ = jQuery.noConflict(); 
jQuery(function($) 

一切似乎如果我用了其中$原本是用來MC $奏效。

我在Firebug和IE中遇到了一個錯誤,我不知道該如何解決。

在一個文件時,我的網頁加載開發商是在平臺上注入做:

$(document).ready(function() { 

,並在Firebug的錯誤規定:「$不是一個函數」。

此錯誤纔開始顯示出來,一旦我做出的改變:

var mc$ = jQuery.noConflict(); 

我想,通過創建MC $變量的東西與開發者的$(document)...呼叫爆發。如果是這樣,我不知道如何解決這個問題,如果沒有,我希望有一個解決方案,我可以將該功能提供回開發者的注入文件。

謝謝!

+0

'.noConflict()'是兼容*其他* JavaScript庫/在同一頁面中,不支持任何方式支持jQuery(在1.6+中爲sans'.sub()')的多個實例。 – 2011-06-04 23:55:14

+3

@Nick Craver noConflict()'[文檔](http://api.jquery.com/jQuery.noConflict/)不同意你的看法。它特別提到了通過'true'作爲參數來解除衝突的'jQuery'符號。 – lawnsea 2011-06-05 00:17:13

+0

@lawnsea - 這是特別的(並限於)1.6+(我上面提到的例外)。請注意,即使這樣,你仍然會遇到許多*問題,例如,插件是在jQuery對象上定義的,就像許多事件處理程序一樣(取決於jQuery或它們的插件)。這來自於解決這些問題的經驗......請記住,如果沒有插件等,那麼沒有理由將舊版本保留在首位。 – 2011-06-05 04:39:14

回答

2

<head>部分呼叫順序必須是下一個:

  1. jQuery library№1;
  2. no conflict for it;
  3. jQuery庫№2。

.noConflict()可以是這樣的:

<script type="text/javascript">var mc$ = jQuery.noConflict();</script> 

使用後此語法的腳本:

mc$('#container').height(); 
4

根本原因是將兩個jQuery實例加載到一個頁面中。通過它的聲音,jQuery的原始實例(1.2.6)也從全局$變量中解除綁定。

從查看http://api.jquery.com/jQuery.noConflict/,你可以嘗試向jQuery.noConflict()調用提供一個額外的參數來表示卸載jQuery,因爲1.4.2的實例似乎在1.2.6之前加載。

除此之外,沒有測試,準確的情況下,我不知道該提供什麼其他的幫助:)

+0

有趣。顯然我做得不對,因爲通過設置'jQuery.noConflict(true);'我的一些插件中斷了。感謝大家迄今爲止的投入。 – Mark 2011-06-05 04:18:06

+0

@Mark不幸的是,這是可以預料的。大多數(如果不是全部的話)jQuery插件依賴於「jQuery」關鍵字來初始化,所以使用'var mc $ = jQuery.noConflict(true)'會導致它們中斷。使用你的上述場景,你可能需要通過你的插件,用'})(mc $);'替換最後一行的'})(jQuery);'變量。 – Jake 2011-08-10 19:59:51