8

我在一个大型站点工作,该站点包含 2 个冲突的 jquery 插件,用于执行 autocmplete。

1)jquery.autocomplete.js(不是jquery ui的一部分):

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

2) jquery.ui.autocomplete.js(来自最新的 jquery ui 库),它也使用了 autocomplete 关键字。

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

有没有办法指定我在调用时只使用第二个 jquery.ui 小部件

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

不改变2个文件?

4

2 回答 2

12

由于第二个自动完成是使用向$.WidgetjQuery 注册自身的方法,因此最容易更改内部自动完成的行为。

如果不对两个脚本加载之间的 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()

使用您的本地版本。

于 2012-08-10T11:55:25.357 回答
2

我尝试使用 jQuery UI 的选项卡功能来实现它,它应该对您同样有效。一个函数在技术上是一个 js 对象,所以你可以简单地重命名它:

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

希望有帮助!

编辑

就像 Alnitak 建议的那样,您还需要删除以前的函数名称。另外,我认为 .fn 是必需的。

于 2012-08-10T11:46:34.810 回答