2010-03-18 94 views
0

我最近继承了一个以各种方式拙劣的网站。我更像是一个php家伙,最初js工作得很好。我没有更改JavaScript或任何包含文件,但做了一些内容编辑后,我从萤火虫中收到错误。Jquery +原型冲突

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] 

周围的Googling我发现几个职位,有时的jQuery +原型不玩好,重新安排脚本能解决这个问题,不过是,我没有碰这些部分我不知道,我甚至需要开始调试。之前的开发人员合并了一个加载原型的head.inc文件,scriptaculous,然后许多页面都在一个子模板中,加载了jquery,用于像lightbox这样的函数。

该网站被临时安置在http://dawn.mikeyhill.com

任何帮助表示赞赏。

回答

1

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

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

你说你没碰代码,我相信你因此,这让三个选项:

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