我在html页面中使用jQuery AutoComplete插件,我还有一个使用原型的手风琴菜单。
它们都可以完美地分开工作,但是当我尝试在一个页面中实现这两个组件时,我得到了一个我无法理解的错误。
未捕获的异常:[Exception ...“组件返回失败代码: 0x80004005(NS_ERROR_FAILURE)[nsIDOMViewCSS.getComputedStyle]“ nsresult:“0x80004005(NS_ERROR_FAILURE)”位置:“JS frame :: file:/// C:/ Documents and 设置/管理员/桌面/网站/ js / jquery-1.2.6.pack.js :: anonymous :: line 11“data:no]
我发现与jQuery冲突的文件是手风琴菜单使用的'effects.js'。我尝试用更新版本替换此文件,但更新似乎打破了手风琴行为。
我的猜测是手风琴中使用的'effects.js'文件被修改以获得手风琴演示输出。我也尝试使用jQuery需要的重写方法来避免与其他库冲突,但这些方法都不起作用。
我从stickmanlabs.com获得了手风琴演示。
可以从jQuery site获取jQuery AutoComplete。
还有其他人遇到过这个问题吗?
答案 0 :(得分: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>
希望这有助于澄清情况。
答案 1 :(得分:10)
jQuery允许您将jQuery函数从$
重命名为其他内容,以避免名称空间与其他库冲突。
你可以做这样的事情
var J = jQuery.noConflict();
详细信息:michaelshadle.com — jQuery's no-conflict mode: yet another reason why it's the best
答案 2 :(得分:8)
在这种情况下,我没有真正看到同时使用这两个库的原因。
你可以使用Prototype(好吧,实际上是Scriptaculous)Ajax.Autocompleter并抛弃jQuery,或者你可以使用jQuery的Accordion并摆脱Prototype。
一次使用这两个库并不是一个好主意,因为: