【问题标题】:conflict between two jquery plugins with same function name两个具有相同函数名的jQuery插件之间的冲突
【发布时间】:2012-08-07 14:21:07
【问题描述】:

我在一个大型站点工作,该站点包含 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 ...

不改变这两个文件?

【问题讨论】:

  • jquery.autocomplete.js 似乎是 github 上的一个单独项目,而 jquery.ui.autocomplete 是官方的 jquery 插件。你不能只使用 1 并删除另一个句号吗?官方的 ui 自动完成功能是否不能满足您的所有需求?他们似乎并没有打算并肩工作
  • 我无法更改或删除 jquery.autocomplete.js ,我认为我拥有的是内部版本,而不是您所引用的 git 版本。一个可能的解决方案是能够使用类似 $( "#tags" ).ui.autocomplete 的方式访问第二个 (ui) 版本
  • “不要使用”根本不是解决名称冲突的方法。此外,仅仅因为它们具有相同的名称,就说两个库不打算一起工作是没有意义的;他们甚至不一定知道彼此的存在。

标签: javascript jquery jquery-ui autocomplete


【解决方案1】:

由于第二个自动完成功能使用$.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({});

希望有帮助!

编辑

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

【讨论】:

  • 好主意,但我试过了,它似乎没有用:jsfiddle.net/turaaa/mbZgS
  • 像Alnitak建议的一样,你还需要删除之前的函数名。
  • @GilZumbrunnen,在尝试加载第二个函数之前 这样做很重要!
猜你喜欢
  • 2011-03-10
  • 2011-08-10
  • 2013-07-25
  • 2023-03-22
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多