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...........