2010-07-21 65 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. 
})(); 

这里的缺点是,你不能再在全局访问这些变量和函数(例如,通过内联事件处理程序)。