Jquery + Prototype冲突

时间:2010-03-18 23:10:10

标签: javascript jquery prototypejs conflict

我最近继承了一个以各种方式拙劣的网站。我更像是一个php人,最初js工作得很好。我没有对javascript或任何包含文件进行任何更改,但在进行了一些内容编辑后,我收到了来自firebug的错误。

a.dispatchEvent is not a function
emptyFunction()protot...ects.js (line 2)
emptyFunction()protot...ects.js (line 2)
fireContentLoadedEvent()protot...ects.js (line 2)

[Break on this error] var Prototype={Version:'1.6.0.2',Brows...pe,Enumerable);Element.addMethods();
protot...ects.js (line 2)
this.m_eTarget.setStyle is not a function

[Break on this error] this.m_eTarget.setStyle( { position: 'relative', overflow:'hidden'} );
protot...ects.js (line 43)
uncaught exception: [Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE)" nsresult: "0x80070057 (NS_ERROR_ILLEGAL_VALUE)" location: "JS frame :: js/prototype_effects.js :: anonymous :: line 2" data: no]

谷歌搜索我发现有几个帖子,有时jquery +原型不能很好地重新排列脚本可以解决这个问题,但是,我没有触及这些部分我不知道我甚至需要开始调试。之前的开发人员合并了一个head.inc文件,该文件加载了原型,scriptaculous,然后许多页面都在子模板中加载了jquery,用于灯箱等功能。

该网站位于http://dawn.mikeyhill.com

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

原型库是侵入性的:它将所有类型的方法添加到Javascript的核心对象中。当通过for(var k in o)迭代对象时,迭代将包括这些新方法(因为Javascript不支持,但是,不可迭代的属性)。这就是为什么Prototype迭代总是通过诸如each()之类的设施来执行,这些设施不受此问题的影响。

问题在于其他代码仍在使用旧的“for-var-in”循环。这段代码会破裂。在99%的Prototype不能与其他库一起工作的情况下,问题是由迭代引起的。

你说你没有触及代码,我相信你,所以这留下了三个选择:

  • 之前有问题,但你没注意到它
  • 有问题的代码仅在特殊情况下执行(由于某些特殊输入)。以前的程序员从未尝试过此输入。
  • 你所处的问题是由于其他一些因素造成的1%:)