为什么有些javascripts与其他javascripts发生冲突?我的意思是我一直在使用图片库的JavaScript代码,然后尝试在jquery中获取文本水印。为什么在使用jquery之后,画廊完全消失了?我在两个脚本中没有使用常见ID。有什么理由吗?
答案 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.
})();
这里的缺点是您无法再全局访问这些变量和函数(例如,通过内联事件处理程序)。