2012-08-10 60 views
7

我正在一个大型站点工作,该站点包含2个用于执行自动完成的冲突jQuery插件。具有相同功能名称的两个jQuery插件之间的冲突

1)jquery.autocomplete.js(未jQuery的用户界面的一部分)的作用:

$.fn.extend({ 
    autocomplete: function ... 

2)jquery.ui.autocomplete.js(从最新jQuery UI的库),也使用自动完成关键字。

$.widget("ui.autocomplete", { ... 

有没有办法来指定,我使用只有第二,jquery.ui部件 调用

$("#tags").autocomplete ... 

时不改变2个文件?

+0

jquery.autocomplete.js似乎是github上的一个单独项目,而jquery.ui.autocomplete是官方的jquery插件。你不能只使用1,并删除其他fullstop?官方的ui自动完成功能是否不能满足你需要的一切?看起来他们并不喜欢并肩工作 – Nope 2012-08-10 09:43:21

+0

我不能改变或删除jquery.autocomplete.js,我想我的是一个内部版本,而不是你正在尝试的git版本。一个可能的解决方案是能够访问第二个(ui)版本,如$(“#tags”).ui.autocomplete – 2012-08-10 11:21:28

+0

“不要使用一个”根本不是解决名称冲突的方法。另外,说两个图书馆不是为了一起工作,仅仅因为它们具有相同的名称,是没有意义的;他们不一定意识到对方的存在。 – Triynko 2015-12-07 20:55:39

回答

9

由于第二个自动完成使用$.Widget方法注册自己与jQuery它将是最容易改变内部的行为。

如果没有对两个脚本加载之间的jQuery对象进行某些更改,您将无法加载它们,因为它们只会相互冲突(或覆盖)。

我想试试这个:

<script src="jquery.autocomplete.js"> </script> 
<script> 
    // rename the local copy of $.fn.autocomplete 
    $.fn.ourautocomplete = $.fn.autocomplete; 
    delete $.fn.autocomplete; 
</script> 
<script src="jquery-ui.autocomplete.js"> </script> 

这将然后进行:

$().autocomplete() 

使用jQuery UI的版本,

$().ourautocomplete() 

使用本地版本。

2

我试图用jQuery UI的标签功能来做到这一点,它应该为你工作。 一个功能在技术上是一个js对象,所以你可以简单地将其重命名:

$.fn.tabs2 = $.fn.tabs; 
    delete $.fn.tabs; 
    $("#tabz").tabs2({}); 

希望帮助!

编辑

像参宿一建议,还需要删除以前的函数的名称。 另外,我认为.fn是必需的。

+0

不错的主意,但我试过,它似乎工作:http:// jsfiddle。net/turaaa/mbZgS/ – 2012-08-10 11:58:28

+0

与Alnitak建议的一样,您还需要删除前一个函数的名称。 – 2012-08-10 12:06:50

+0

@GilZumbrunnen在你尝试加载第二个函数之前,这么做很重要! – Alnitak 2012-08-10 12:08:32

相关问题