eval 在ie ff下運行 出現的form爲定義情況

今天又碰到一件鬱悶的事,讓一個小小的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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章