27

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

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

未捕获的异常:[异常...“组件返回失败代码:0x80004005 (NS_ERROR_FAILURE) [nsIDOMViewCSS.getComputedStyle]”nsresult:“0x80004005 (NS_ERROR_FAILURE)”位置:“JS 框架 :: file:///C:/Documents and Settings /Administrator/Desktop/website/js/jquery-1.2.6.pack.js :: 匿名 :: 第 11 行“数据:无]

我发现与 jQuery 冲突的文件是手风琴菜单使用的“effects.js”。我尝试用较新版本替换此文件,但较新版本似乎破坏了手风琴行为。

我的猜测是手风琴中使用的'effects.js'文件被修改以获得手风琴演示输出。我还尝试使用 jQuery 需要的覆盖方法来避免与其他库发生冲突,但这不起作用。

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

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

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

4

3 回答 3

118

有两种可能的解决方案: 与旧版本的 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>

希望这有助于澄清情况。

于 2008-09-25T22:08:02.367 回答
10

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

你可以做这样的事情

var J = jQuery.noConflict();

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

于 2008-09-25T17:16:04.517 回答
8

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

您可以使用 Prototype(实际上是 Scriptaculous)的Ajax.Autocompleter并抛弃 jQuery,或者您可以使用 jQuery 的Accordion并摆脱 Prototype。

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

  1. 它们会引起冲突。
  2. 通过将它们都包含在内,您可以强制用户同时下载它们。这不是带宽友好的方法。
于 2008-09-27T03:55:47.270 回答