2012-03-22 97 views
0

你好,我寫了一個像Facebook一樣的自動完成腳本;它在一個單一的jQuery版本加載的php頁面上運行良好。jQuery衝突1.6和1.7

我不得不在一個有兩個jQuery調用的頁面中使用它:一個用於jquery-1.6.min.js,另一個用於://ajax.googleapis.com/ajax/libs/jquery/1.7/ jquery.min.js

在這種情況下,我有一個問題,使用jquery/1.7/jquery.min.js的JavaScript不起作用。

我嘗試使用 jQuery.noConflict();

但在使用jQuery的1.6.min.js腳本不工作的話。

有沒有人有任何建議?

感謝 F.

回答

1

我建議你儘量避免可能的話,使用2版本的jQuery的同一頁面上。

如果由於某些原因你無法避免它,那麼你必須在兩個版本的jQuery上使用noConflict來維護這兩個版本。

類似於var $1 = jQuery.noConflict()和var $2 = jQuery.noConflict()並使用這兩個不同的變量。現在在加載第二個jQuery文件之前執行第一個noConflict代碼非常重要。

+0

你對兩個版本都使用'noConflict'「的建議沒有多大意義,因爲它們都綁定到同一個作用域中的同一個變量名」jQuery「。刪除(或有條件地加載)其中一個實例是唯一的解決方案。 – vzwick 2012-03-22 00:10:59

+0

類似於'var $ 1 = jQuery.noConflict()'和'var $ 2 = jQuery.noConflict()'並使用這兩個不同的變量。現在在加載第二個jQuery文件之前執行第一個noConflict代碼非常重要。 – ShankarSangoli 2012-03-22 00:18:26

+0

再次說明:'noConflict()'使得jQuery不會綁定到'$'。但它仍然綁定到'jQuery'。 – vzwick 2012-03-22 00:20:48

1

由以下替換script標籤加載你的jQuery 1.6:

if (typeof jQuery == 'undefined') { 
    var script = document.createElement('script'); 
    script.type = "text/javascript"; 
    script.src = "/path/to/jquery-1.6.min.js"; 
    document.getElementsByTagName('head')[0].appendChild(script); 
} 

這確保瞭如果沒有其他版本(如1.7從CDN)存在本地的jQuery的拷貝才加載。