javascript:eval在IE和firefox中的不同

今天又碰到一件郁闷的事,让一个小小的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.onerror=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...........

posted @ 2008-08-07 12:34  binlib  阅读(4921)  评论(3编辑  收藏  举报