javascript冲突

时间:2010-07-21 07:17:48

标签: javascript

为什么有些javascripts与其他javascripts发生冲突?我的意思是我一直在使用图片库的JavaScript代码,然后尝试在jquery中获取文本水印。为什么在使用jquery之后,画廊完全消失了?我在两个脚本中没有使用常见ID。有什么理由吗?

3 个答案:

答案 0 :(得分:3)

正如Mathias正确指出的那样,最可能的问题是你的其他库也在使用$符号 - 当你将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());

答案 1 :(得分:1)

答案 2 :(得分:1)

有时人们可能会在其打包的javascript中使用全局变量。如果你有两个使用相同全局变量的包,显然会出现问题。要解决它,你可以尝试在每个不同的包的代码周围创建一个闭包。没有看到代码,我不是百分之百它会工作,但这是一个例子:

// 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.
})();

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