2010-03-18 83 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%的問題是由於一些其他因素:)