jQuery和原型冲突

我在HTML页面中使用jQuery自动完成插件,我也有一个使用原型的手风琴菜单。

他们都完全分开工作,但当我试图在单个页面中实现这两个组件时,我得到一个我一直无法理解的错误。

未捕获的exception:[exception…]组件返回失败代码:0x80004005(NS_ERROR_FAILURE)[nsIDOMViewCSS.getComputedStyle]“nsresult:”0x80004005(NS_ERROR_FAILURE)“位置:”JS框架::文件:/ / / C:/ Documents and Settings /Administrator/Desktop/website/js/jquery-1.2.6.pack.js :: anonymous :: line 11“data:no]

我发现与jQuery冲突的文件是手风琴菜单使用的“effects.js”。 我试图用更新的版本replace这个文件,但更新似乎打破了手风琴的行为。

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

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

jQuery AutoComplete可以从jQuery站点获得。

有没有人遇到过这个问题?

有两种可能的解决scheme:与旧版本的Scriptaculous和jQuery发生冲突(Scriptaculous试图错误地扩展本地数组原型) – 首先尝试升级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> 

希望这有助于澄清情况。

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

你可以做这样的事情

 var J = jQuery.noConflict(); 

细节在这里: michaelshadle.com – jQuery的不冲突模式:为什么它是最好的另一个原因

在这种情况下,我并不真正看到同时使用两个库的原因。

你可以使用Prototype的(实际上是Scriptaculous, Ajax.Autocompleter和jQuery),或者你可以使用jQuery的Accordion并且去掉Prototype。

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

  1. 他们可能会导致冲突。
  2. 通过包括他们,你强迫你的用户下载他们两个。 这不是带宽友好的做法。