1.eval("1+2") 很简单,返回1+2的结果3,很多文章首先就以它为例,实际上似乎很少用到
2.动态获取表单元素:
1
function
SetInputValue(inputName)
{
2 var input = eval("document.form1." + inputName);
3 input.value = "test";
4 }
初学javascript时经常这样写,只需用getElementById等方法代替即可,用jQuery的选择器就更简单了。
2 var input = eval("document.form1." + inputName);
3 input.value = "test";
4 }
另外,据网友测试的结果,eval的效率会低一些。
步入正题,在写webform时会碰到根据form中栏位的值来判断,例如根据金额栏位来决定表单流程的签核权限,或N次and、or逻辑组合起来的判断条件。这些“无价值”的判断是易变的,user就是上帝,说改就得改,这种hardcode越来越多,后续变得不易维护,此时便有必要将“条件判断”提取出来。将这个条件判断表达式用以字符串的方式存储起来,调用时用eval执行即可。
改版前:
1
if
(Money
>=
1000
)
2 {
3 //需要部级主管签核
4}
5 if (Money >= 10000 )
6 {
7 //需要总经理签核
8}
9
用eval后:
2 {
3 //需要部级主管签核
4}
5 if (Money >= 10000 )
6 {
7 //需要总经理签核
8}
9
1
function
GetAdmin()
2 {
3 通过XHR将表单数据提交给后台处理程序,返回相应结果
4}
签核权限在Table中维护好:
2 {
3 通过XHR将表单数据提交给后台处理程序,返回相应结果
4}
栏位:条件表单式 结果
数据:if(${Money} >=1000){"true"} 部级主管
if(${Money} >=10000){"true"} 总经理
后台处理程序将Money的实际值去替换${""},即变成可执行的js代码,eval后得到true即表示满足此条件,程式即返回相应的“结果”。例如可以写更复杂的条件表达式:
1
if
($
{Money}
>=
1000
&&
($
{
栏位
A}
==
"
on
"
||
$
{
栏位
B}
!=
"
on
"
))
{
2 if(${栏位C}){
3 return "true";
4 }
5 if( ${栏位D} ){
6 return "true";
7 }
8 }
这个条件表达式在用其他界面去维护,或使用xml去配置。若碰到条件判断比较多、简单(例如只是根据某个栏位值来判断)、易变,这样的方式比较有成效。
2 if(${栏位C}){
3 return "true";
4 }
5 if( ${栏位D} ){
6 return "true";
7 }
8 }
既然if条件可以这样,那return的结果同样也可以是动态的,例如:
1
if
(
"
${TelNumber}
"
==
"
on
"
)
{
2 eval('if("${NewAdd}"=="ON"){"申請新分機號碼"}else if("${NewAdd}"=="ON2"){"使用部門已存在的分機號碼:${T22}"}else{"使用部門已存在的分機號碼:${T33}"}') + ",所在線號:${Location}"
3}
嵌套使用eval返回复杂信息。
2 eval('if("${NewAdd}"=="ON"){"申請新分機號碼"}else if("${NewAdd}"=="ON2"){"使用部門已存在的分機號碼:${T22}"}else{"使用部門已存在的分機號碼:${T33}"}') + ",所在線號:${Location}"
3}
自认为算一个“妙用”吧:)