jQuery&;原型冲突

jQuery&;原型冲突,jquery,autocomplete,prototypejs,accordion,conflict,Jquery,Autocomplete,Prototypejs,Accordion,Conflict,我在一个html页面中使用jQuery自动完成插件,我还有一个使用prototype的手风琴菜单 它们都可以完美地分开工作,但当我试图在一个页面中实现这两个组件时,我遇到了一个我无法理解的错误 未捕获异常:[异常…”组件返回故障代码: 0x80004005(NS\u错误\u失败)[nsIDOMViewCSS.getComputedStyle] nsresult:“0x80004005(NS\u错误\u失败)”位置:“JS帧:: file:///C:/Documents 和 设置/管理员/桌面/网

我在一个html页面中使用jQuery自动完成插件,我还有一个使用prototype的手风琴菜单

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

未捕获异常:[异常…”组件返回故障代码: 0x80004005(NS\u错误\u失败)[nsIDOMViewCSS.getComputedStyle] nsresult:“0x80004005(NS\u错误\u失败)”位置:“JS帧:: file:///C:/Documents 和 设置/管理员/桌面/网站/js/jquery-1.2.6.pack.js:: 匿名::第11行“数据:否]

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

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

我得到了手风琴演示从

jQuery自动完成可以从以下位置获得


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

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

你可以这样做

var J = jQuery.noConflict();

此处的详细信息:

有两种可能的解决方案:与旧版本的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.noConflict();
jQuery(文档).ready(函数($){
$(“#示例”).autocomplete(选项);
});

希望这有助于澄清这种情况。

在这种情况下,我不太明白同时使用这两个库的原因

您可以使用Prototype(实际上是Scriptaculous)抛弃jQuery,也可以使用jQuery抛弃Prototype

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

  • 它们可能导致冲突
  • 通过同时包含它们,您可以强制用户同时下载它们。这与友好的态度不符

  • 同意。像这样使用两个javascript框架从来都不是一个好理由。即使您更喜欢jquery中的控制器X和原型中的控制器Y。额外下载和冲突。像这样使用两个javascript框架从来没有好的理由。有。例如,Drupal CMS与jQuery一起航行,许多贡献的模块在此基础上展开和构建。然而,在某些情况下,您需要添加一个漂亮的javascript小工具,它没有1:1的jquery等价物。此外,根据SunSpider基准数据,每个javascript框架在性能方面都有自己的优缺点。。所以很高兴知道Drupal7最终默认将所有jquery代码包装在匿名函数中!没有比约翰·雷斯格自己的回答更好的了!