2011-07-22 45 views
0

我有一個解析包含javascript函數調用的xml的函數。這方面的一個例子是:javascript eval問題

eval(getElementText(PropValue[0])); 

getElementText(PropValue[0] = top.hidePopWin() 

我按照這個調用到hidePopWin功能,看着它從功能上給函數的底部完整。

一切看起來都在爲了不過,我在Firefox中得到這個討厭的錯誤:頂部是空 正如你可能已經猜到hidePopWin關閉當前顯示的彈出窗口。

所以,hidePopWin被調用,它會經歷很好(實際上彈出窗口實際上關閉),但之後是問題。它不會進入下一步。我在Firefox(firebug)中得到頂部是null消息,它只是停止。

我需要提的唯一一件事就是整個過程始於雙擊事件(遺留代碼)。還有一個單擊事件也會觸發。起初我想也許是這個問題,但是,我拿出了onclick事件的參考,並且我仍然得到相同的消息。

所以我認爲它與eval聲明有關。只是爲了獲得更多信息,我在eval聲明之上放置了console.log("1"),在eval之下放置了console.log("2")。 「1」打印,「2」不打印。

有沒有人有任何想法可能是什麼問題?

更新:

if(getElementText(PropValue[0]) == "top.hidePopWin();"){ 
     console.log('here'); 
     top.hidePopWin(); 
     console.log('end'); 
}else{ 
     console.log(getElementText(PropValue[0])); 
     eval(getElementText(PropValue[0])); 
} 

OK我嘗試了上面......我看到了 「這裏」 的聲明,但它仍說頂部是空。 「結束」語句從不打印。當我點擊最上面的是FF中的null時,它突出顯示了評估聲明?所以我不知道發生了什麼。

+0

有沒有具體的原因是你使用'eval'? – locrizak

+0

這段代碼解析一個XML文件,並且在節點內部包含一個CDATA,然後它包含函數調用,我相信eval是實際處理函數調用的唯一方法 – webdad3

回答

0

OK ...這可能不是最好的方法,但我最終得到它的工作。根據建議更改代碼運行top.hidePopWin()。我嘗試了這些建議,但我是仍然得到頂部爲空的問題。

無奈之下我拿出「頂」,現在它的作品。所以我猜有沒有一個「頂」變量(奇怪,我的運算符號INION)。

所以現在我正在捕獲如果字符串等於「頂部。hidePopWin()」,然後不要叫我打電話的功能hidePopWin()的EVAL;

似乎工作讓我知道,如果有是要對這個另一種方式

2

不,但你可以更改代碼,直接執行代碼以外的eval和測試嗎?

所以,改變,eval(getElementText(PropValue [0])); 至 top.hidePopWin();

看看你是否得到相同的錯誤。

+0

那沒有工作 - 查看更新的問題 – webdad3

1

是「頂」在該範圍內可見,如果你在FF斷點(在執行console.log(「這裏」)行?這聽起來像有沒有這樣的變量(我不知道爲什麼在彈出雖然關閉)