首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

动态话语 eval

2012-10-12 
动态语句 evaldiv onSubmittest() methodpostinput typetext nametxt1input typesubmit

动态语句 eval
<div onSubmit="test();" method=post&gt;
&lt;input type="text" name="txt1"&gt;
&lt;input type="submit" value=提交&gt;
&lt;/form&gt;</pre>
?
<p>但是测试发现,在ie和firefox中都很正常,郁闷啊.究竟哪里出错?难道是eval,

我又改之为?alert(eval("form1.txt1.value")),
仍然正常...................无限郁闷中.........</p>
<p>最后我使出我最...厉害的杀手锏,在脚本中添加如下代码:</p>
<p>window.onerror=reportError;<br>
function reportError(msg,url,line) {<br>
??????var str = "You have found an error as below: \n\n";<br>
??????str += "Err: " + msg + " on line: " + line;<br>
?????alert(str);<br>
?????return true;<br>
}</p>
<pre name="code" + msg + " on line: " + line;
     alert(str);
     return true;
}</pre>
?
<p>错误终于显出原形:<img src="http://images.cnblogs.com/cnblogs_com/yuanshangcao/ERROR.JPG" border="0" alt="动态话语 eval" width="350" height="129">
?</p>
<p>Form1未定义?不可能.网页中有一个form,name和id都是Form1.怎能没定义?!将测试html改为</p>
<pre name="code" onSubmit="test();" method=post&gt;
&lt;input type="text" name="txt1"&gt;
&lt;input type="submit" value=提交&gt;
&lt;/form&gt;</pre>
?
<p>之后,再在ff中试一下,出错.终于发现错误的原因,firefox下,如果写成""+变量,再用eval后,ff无法正确执行,在ie中正常,郁闷,有没有解决方法呢?有!</p>
<p>改之为</p>
<pre name="code" onSubmit="test();" method=post&gt;
&lt;input type="text" name="txt1"&gt;
&lt;input type="submit" value=提交&gt;
&lt;/form&gt;</pre>
<p>?在form1前面,加一个"document.",再测试,正常,问题解决..............郁闷,为什么"form1.XX"可以,为什
么"form1."+变量不行,而"document.form1."+变量又可以..........真让人糊涂啊,这javascript,这
firefox...........</p>
<p>?</p>

--------------------
呵呵,看看这篇文章,你就明白了。

(1)对于IE浏览器,默认已经提供了这样的函数:execScript,用于在全局空间执行代码,只是知道的人还不多。
(2)对于Firefox浏览器,直接调用eval函数,则在调用者的空间执行;如果调用 window.eval则在全局空间执行。
这个知道的人估计就更少了。毕竟alert(eval==window.eval)返回true!

热点排行