在javascript中eval()函数功能就是执行一段javascript代码字符串,相当于SQL里的execute(执行一条动态拼接出的SQL,经常用到)。w3school中介绍eval时说,它的功能强大,但使用到的情况却不多。先附上两个简单例子:
  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的选择器就更简单了。
  另外,据网友测试的结果,eval的效率会低一些。

  步入正题,在写webform时会碰到根据form中栏位的值来判断,例如根据金额栏位来决定表单流程的签核权限,或N次and、or逻辑组合起来的判断条件。这些“无价值”的判断是易变的,user就是上帝,说改就得改,这种hardcode越来越多,后续变得不易维护,此时便有必要将“条件判断”提取出来。将这个条件判断表达式用以字符串的方式存储起来,调用时用eval执行即可。
  改版前:
1if(Money >= 1000)
2{
3    //需要部级主管签核
4}

5if(Money >= 10000)
6{
7    //需要总经理签核
8}

9
  用eval后:
1function GetAdmin()
2{
3    通过XHR将表单数据提交给后台处理程序,返回相应结果
4}
  签核权限在Table中维护好:
  栏位:条件表单式  结果
  数据: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去配置。若碰到条件判断比较多、简单(例如只是根据某个栏位值来判断)、易变,这样的方式比较有成效。
  既然if条件可以这样,那return的结果同样也可以是动态的,例如:
  
1if ("${TelNumber}" == "on"{
2    eval('if("${NewAdd}"=="ON"){"申請新分機號碼"}else if("${NewAdd}"=="ON2"){"使用部門已存在的分機號碼:${T22}"}else{"使用部門已存在的分機號碼:${T33}"}'+ ",所在線號:${Location}"
3}
  嵌套使用eval返回复杂信息。
  
  自认为算一个“妙用”吧:)
  
  
  
 
 posted on 2009-08-13 17:06  剑寒  阅读(1906)  评论(0编辑  收藏  举报