2011-03-25 75 views
2

我的jQuery资源互相冲突。这些库包含相同的字母变量。换句话说,compressed.js和google.com/jsapi。使用相同的变量是否有一个简单的方法呢?我该如何制作jQuery库不会互相影响?

<script type="text/javascript" src="compressed.js"></script> 
<script type="text/javascript"> 
$('slideshow').style.display='none'; 
$('wrapper2').style.display='block'; 
var slideshow=new TINY.slideshow("slideshow"); 
window.onload=function(){ 
    slideshow.auto=false; 
    slideshow.speed=5; 
    slideshow.info="information"; 
    slideshow.thumbs="slider"; 
    slideshow.left="slideleft"; 
    slideshow.right="slideright"; 
    slideshow.scrollSpeed=4; 
    slideshow.spacing=5; 
    slideshow.active="#fff"; 
    slideshow.init("slideshow","image"); 
} 
</script> 

二冲突的设置:

<script src="http://www.google.com/jsapi" type="text/javascript"></script> 
<script type="text/javascript"> 
google.load('search', '1', {language : 'en', style : google.loader.themes.SHINY}); 
google.setOnLoadCallback(function() { 
var customSearchControl = new google.search.CustomSearchControl('012677673255316824096:sean13fvlei'); 
customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET); 
var options = new google.search.DrawOptions(); 
options.setSearchFormRoot('cse-search-form'); 
customSearchControl.draw('cse', options); 
    }, true); 
</script> 
+1

这确实让我想知道为什么这些脚本首先使用全局变量。 – Powerlord 2011-03-25 15:46:02

+0

哪些变量名称冲突? – 2011-03-25 15:50:12

+0

我想象它是“选项”加载的插件使用它。有些甚至将其视为全球性的。 – 2011-03-25 15:54:59

回答

2

的问题是,在这个脚本标签的JavaScript文件(full URL):

<script type="text/javascript" src="compressed.js"></script> 

定义此功能:

function $(i) { 
    return document.getElementById(i) 
} 

但是$是jQuery使用的变量 - 因此使用$.noConflict()的建议意外地是正确的。您正尝试使用Prototype和jQuery,它们都尝试使用$。您使用的Tiny Slideshow是用于Prototype,而不是jQuery - 仅仅因为库定义了$并不意味着它是jQuery!

所以,是的,您应该阅读,了解,并使用$.noConflict()说明。

+0

我只是重命名var $,还是必须单独重命名每个重复字母var,如m,a,b,c等? – Stephanie 2011-03-25 18:52:18

+0

由于您要并排使用Prototype和jQuery,因此您只需调用'jQuery.noConflict()',并使用'jQuery'(这是一个变量名)而不是使用'$'来表示jQuery 。 – 2011-03-25 19:15:46

+0

如果我误解了你的问题,我很抱歉。 '$'_应该是唯一有冲突的变量名称。在JavaScript中,变量名称可以重用,只要它们在不同的范围内 - 因此不需要重命名每个重复的变量名称。这是否回答你的问题? – 2011-03-25 19:53:00

3

你也可以试试这个;

替换所有$$(dbl($(sgl(在JavaScript文件(compressed.js)。

然后在html文件中需要更改代码的前两行,如下所示;

sgl('slideshow').style.display='none'; 
sgl('wrapper').style.display='block'; 
0

添加gsearch插上,然后做一个jQuery.noConflict()

<script type="text/javascript" src="http://google.com/jsapi"></script> 
        <script type="text/javascript">google.load("jquery", "1");</script> 
        <script type="text/javascript">google.load("search", "1");</script> 
        <script type="text/javascript" src="/js/jquery.gSearch-1.0-min.js"></script> 
        <script> 

        jQuery.noConflict(); 
        jQuery(document).ready(function()  {  
           jQuery("#search-results").gSearch({ 
              search_text : 'what you want to search', 
              count : 8, 
              site : 'your site url', 
              pagination : true    
           }); 
        });  


        </script> 

边注:谷歌不发出的API密钥,以便考虑到这一点删除它看到此链接: http://gsearch.scottreeddesign.com/documentation.html