jQuery和Prototype Conflict

27 jquery conflict autocomplete accordion prototypejs

我在一个html页面中使用jQuery AutoComplete插件,我也有一个使用原型的手风琴菜单.

它们都可以完美地分开工作,但是当我尝试在单个页面中实现这两个组件时,我得到了一个我无法理解的错误.

未捕获的异常:[Exception ..."组件返回失败代码:0x80004005(NS_ERROR_FAILURE)[nsIDOMViewCSS.getComputedStyle]"nsresult:"0x80004005(NS_ERROR_FAILURE)"location:"JS frame :: file:/// C:/ Documents and Settings /Administrator/Desktop/website/js/jquery-1.2.6.pack.js :: anonymous :: line 11"data:no]

我发现与jQuery冲突的文件是'effects.js',它是由手风琴菜单使用的.我尝试用更新版本替换此文件,但更新似乎打破了手风琴行为.

我的猜测是手风琴中使用的'effects.js'文件被修改以获得手风琴演示输出.我也尝试使用jQuery需要的重写方法来避免与其他库冲突,但是没有用.

我从stickmanlabs.com获得了手风琴演示.

并且jQuery AutoComplete可以从jQuery站点获得.

还有其他人遇到过这个问题吗?

Joh*_*sig 117

有两种可能的解决方案:与旧版Scriptaculous和jQuery发生冲突(Scriptaculous试图错误地扩展本机Array原型) - 首先尝试升级Scriptaculous的副本.

如果这不起作用,您将需要使用noConflict()(如上所述).然而,有一个问题.由于您要包含插件,因此您需要按特定顺序执行包含,例如:

<script src="jquery.js"></script>
<script src="jquery.autocomplete.js"></script>
<script>
  jQuery.noConflict();
  jQuery(document).ready(function($){
    $("#example").autocomplete(options);
  });
</script>
<script src="prototype.js"></script>
<script src="effects.js"></script>
<script src="accordion.js"></script>
Run Code Online (Sandbox Code Playgroud)

希望这有助于澄清情况.

  • 不能比John Resig自己的答案好得多! (38认同)

Tah*_*tar 10

jQuery允许您将jQuery函数重命名为$其他函数,以避免名称空间与其他库冲突.

你可以做这样的事情

var J = jQuery.noConflict();
Run Code Online (Sandbox Code Playgroud)

详细信息:michaelshadle.com - jQuery的无冲突模式:它是最好的另一个原因


Fcz*_*bkk 8

在这种情况下,我没有真正看到同时使用这两个库的原因.

你可以使用Prototype(实际上是Scriptaculous)Ajax.Autocompleter和ditch jQuery,或者你可以使用jQuery的Accordion并摆脱Prototype.

一次使用这两个库并不是一个好主意,因为:

  1. 他们可能会导致冲突.
  2. 通过包含它们,您强制用户同时下载它们.这不是带宽友好的方法.