2010-07-21 81 views
3

爲什麼一些javascripts會與其他一些javascript衝突?我的意思是我一直在使用JavaScript代碼圖片庫,然後試圖獲取jQuery文本水印。爲什麼在使用jQuery之後,畫廊完全消失了?我在兩個腳本中沒有使用常見的ID。有什麼理由呢?JavaScript衝突

回答

3

由於馬蒂亞斯已經正確地指出,最有可能的問題是,你的其他庫也使用$符號 - 當你加入jQuery的頁面它改寫舊$變量有自己的$ ...和你第一個JavaScript庫停止工作。解決方法是調用jQuery.noConflict()將$變量恢復到第一個庫。您仍然可以使用jQuery插件 - 您只需更新使用$的示例腳本即可使用jQuery。因此$("#my_content").css({color: "red"});將成爲jQuery("#my_content").css({color: "red"});

或者,你可以用這種方式jQuery對象賦給另一個變量對象:

$jq=jQuery.noConflict(); //From now on jQuery can be called with the $jq function 

,或者你可以在封閉中使用它:

(function($) { 
    // $ in here will map to jQuery 
    //outside of this code $ will map to your other library's $ 
})(jQuery.noConflict()); 
+0

感謝您的簡單... – Sachindra 2010-07-21 07:46:14

1
+0

真的有與他所問的無關。 – nickf 2010-07-21 07:21:05

+2

當然可以。如果顯然jquery是這裏的問題,那麼jquery可能會覆蓋函數或變量,比如$或其他東西,這很常見。 – 2010-07-21 07:26:59

+0

道歉..但不知道這裏有什麼?越來越迷茫......只有在包含不同的庫時纔會出現這種情況。 – Sachindra 2010-07-21 07:28:01

1

有時,人們可以在其包裝JavaScript中使用全局變量。如果你有兩個使用相同全局變量的包,顯然會出現問題。要解決它,你可以嘗試的是圍繞每個不同的包的代碼創建一個閉包。如果沒有看到代碼,我不是100%它會工作,但這裏有一個例子:

// gallery.js 
var textTitle = "Image gallery"; 

function getGalleryTitle() { return textTitle; } 


////////////// 
// watermark.js 

var textTitle = "Watermark"; 


alert(getGalleryTitle()); // "Watermark" :(

現在與關閉,使用匿名函數創建:

(function() { 
    var textTitle = "Image gallery"; 
    function getGalleryTitle() { 
     return textTitle; // this will always be "Image gallery" 
    } 
})(); 

(function() { 
    var textTitle = "Watermark"; // won't conflict with any other code. 
})(); 

這裏的缺點是,你不能再在全局訪問這些變量和函數(例如,通過內聯事件處理程序)。