今天又碰到一件鬱悶的事,讓一個小小的eval給絆倒了.究竟是怎麼回事呢?請聽我詳解.
今天做項目,有一個網頁在ie下正常工作,但在火狐下,他居然罷工.我仔細檢查了一下網頁上的javascript,也沒發現什麼不兼容的地方.不得已,我祭出了法寶級的工具--fireBug.在FireBug中,我設置了斷點,按F10單步調試,單隻見走到一半,網頁閃了一下,便結束了.鬱悶.仔細觀察了一下代碼,發現在此地方,fireBug停下: var Size_List=eval("Form1.Size_List_"+suit_array_s[0].trim())...... 我想難不成firefox不支持根據name取值,於是我做了一個實驗,實驗html內容如下:
<head>
<script type="text/javascript">
function test()
{
alert(form1.txt1.value);
}
</script>
</head>
<form name=form1 action="" onSubmit="test();" method=post>
<input type="text" name="txt1">
<input type="submit" value=提交>
</form>
但是測試發現,在ie和firefox中都很正常,鬱悶啊.究竟哪裏出錯?難道是eval,我又改之爲 alert(eval("form1.txt1.value")),仍然正常...................無限鬱悶中.........
最後我使出我最...厲害的殺手鐗,在腳本中添加如下代碼:
window.οnerrοr=reportError;
function reportError(msg,url,line) {
var str = "You have found an error as below: /n/n";
str += "Err: " + msg + " on line: " + line;
alert(str);
return true;
}
錯誤終於顯出原形:
Form1未定義?不可能.網頁中有一個form,name和id都是Form1.怎能沒定義?!將測試html改爲
<head>
<script type="text/javascript">
function test()
{
alert("form1.txt"+1+".value");
}
</script>
</head>
<form name=form1 action="" onSubmit="test();" method=post>
<input type="text" name="txt1">
<input type="submit" value=提交>
</form>
之後,再在ff中試一下,出錯.終於發現錯誤的原因,firefox下,如果寫成""+變量,再用eval後,ff無法正確執行,在ie中正常,鬱悶,有沒有解決方法呢?有!
改之爲
<head>
<script type="text/javascript">
function test()
{
alert("document.form1.txt"+1+".value");
}
</script>
</head>
<form name=form1 action="" onSubmit="test();" method=post>
<input type="text" name="txt1">
<input type="submit" value=提交>
</form>
在form1前面,加一個"document.",再測試,正常,問題解決..............鬱悶,爲什麼"form1.XX"可以,爲什麼"form1."+變量不行,而"document.form1."+變量又可以..........真讓人糊塗啊,這javascript,這firefox...........
轉自:http://www.cnblogs.com/yuanshangcao/archive/2008/10/28/1262750.html