2012-03-22 94 views
0

你好,我写了一个像Facebook一样的自动完成脚本;它在一个单一的jQuery版本加载的php页面上运行良好。jQuery冲突1.6和1.7

我不得不在一个有两个jQuery调用的页面中使用它:一个用于jquery-1.6.min.js,另一个用于://ajax.googleapis.com/ajax/libs/jquery/1.7/ jquery.min.js

在这种情况下,我有一个问题,使用jquery/1.7/jquery.min.js的JavaScript不起作用。

我尝试使用 jQuery.noConflict();

但在使用jQuery的1.6.min.js脚本不工作的话。

有没有人有任何建议?

感谢 F.

回答

1

我建议你尽量避免可能的话,使用2版本的jQuery的同一页面上。

如果由于某些原因你无法避免它,那么你必须在两个版本的jQuery上使用noConflict来维护这两个版本。

类似于var $1 = jQuery.noConflict()和var $2 = jQuery.noConflict()并使用这两个不同的变量。现在在加载第二个jQuery文件之前执行第一个noConflict代码非常重要。

+0

你对两个版本都使用'noConflict'“的建议没有多大意义,因为它们都绑定到同一个作用域中的同一个变量名”jQuery“。删除(或有条件地加载)其中一个实例是唯一的解决方案。 – vzwick 2012-03-22 00:10:59

+0

类似于'var $ 1 = jQuery.noConflict()'和'var $ 2 = jQuery.noConflict()'并使用这两个不同的变量。现在在加载第二个jQuery文件之前执行第一个noConflict代码非常重要。 – ShankarSangoli 2012-03-22 00:18:26

+0

再次说明:'noConflict()'使得jQuery不会绑定到'$'。但它仍然绑定到'jQuery'。 – vzwick 2012-03-22 00:20:48

1

由以下替换script标签加载你的jQuery 1.6:

if (typeof jQuery == 'undefined') { 
    var script = document.createElement('script'); 
    script.type = "text/javascript"; 
    script.src = "/path/to/jquery-1.6.min.js"; 
    document.getElementsByTagName('head')[0].appendChild(script); 
} 

这确保了如果没有其他版本(如1.7从CDN)存在本地的jQuery的拷贝才加载。