<input type="text"  onblur="excute(this)">function excute(obj){
   …………………校验表达式合法...
   if(合法)
      obj.value = eval(表达式)
   else
      …………如果不合法
}

解决方案 »

  1.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html lang="gb2312" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
    <script>
    window.onload = function(){
    var oT = document.getElementById('text1');

    oT.onblur = function(){
    alert(eval(oT.value));
    }
    }
    </script>
    </head>
    <body>
    <input type="text" id="text1" />
    </body>
    </html>
      

  2.   

    非常感谢上面的网友那么快的答复。
    看到eval这个函数,突然想起,应该是用过的了。
    验证表达式合法性方面,我用了Javascript自己带的try{}catch(e){},问题就解决了。
    不知道是否还有其他验证表达式合法性的方法。
    因为不能即时派分,要等明天了。
    再次感谢。
      

  3.   

    用EL表达式?不用了吧???而且,我的式子不是预先写好的,是随时可以改的啊!网页运行的时候,不可能在文本框里面输入EL表达式,然后光标离开的时候触发事件来取得结果吧???
      

  4.   

    js中是没有这样的函数的,需要自己写一个公式校验函数.本人为你写了一个,没有经过严格测试的.可以解决你的问题.
    [code=JScript][<html>
    <head>
    <title>MUMU_JAVA</title>
    </head>
    <body>
    <script>
    function   validateFormula()   
      {   
      var s = document.getElementById("tt").value;   var r = s.match(/[^+\-*/()^\:]+/g);
      var totalLength = 0;
      if(r!=null){
    totalLength = r.length;
      }          if(r)   
              {   
                      var mm = {};   
                      for(var i=0;i<r.length;i++)   
                      { 
      if(isNaN(r[i])){
    alert("输入了非数字的公式:"+r[i]);
    return false;
      }else if("undefined"==typeof(mm[r[i]])){   
                                      mm[r[i]] = r[i];   
                          }   
                      }   
                      for(var i in mm)   
                      {   
     s = s.replace(new RegExp(i,"g"), "1");   
                      }
      var qq = s.match(/[^+\-*/()^]+/g);   var   dd   =   {};   
                      for(var   i=0;   i<qq.length;   i++)   
                      {   
                              if("undefined"==typeof(dd[qq[i]]))   
                              {   
                                      dd[qq[i]]   =   qq[i];
                              }   
                      }   
                       for(var   i   in   dd)   
                      {   
                              s   =   s.replace(new   RegExp(i,   "g"),   "1");
      totalLength += 1;//加上所有小数的个数
                      }   totalLength -= 1;//减掉重复的1才是小数的个数
      var sum = s.replace(new RegExp("[-]|[*]|[/]","g"),"+");//用来测试是否连续输入两个元素
              try   
                      {   
    if(!isNaN(eval(s))&&eval(sum)==totalLength)   
                              {   
                                      alert("公式合法!");
      document.getElementById("tt").value = eval(document.getElementById("tt").value);
                                      return true;   
                              }   
                      }   
                      catch   (ex)   
                      {   
                      }   
              }else if(r==null){
    alert("你没有输入公式项!!!");
    return true;
      }   
              alert("公式不合法!");   
      return false;
    }   
    </script>
    </body>
    <input type="text" name="tt" value="" onblur="validateFormula()">
    </html>]
      

  5.   

    非常感谢上面各位网友。
    确实用Eval()函数就可以了。我找回我自己一年多前做作业写的那个网页计算器的代码,原来自己一年多前已经用过了。
    这个函数还可以当作isNaN()来用,如果输入了其他字符,会报错的。
    7楼的代码有点大材小用了,有空的时候学习一下。
      

  6.   

    eval()是可以解决得到结果的情况,但是它不能判断输入的公式是否合法,如果不合法eval()就只能报错了。所以要是在应用中使用的话是不行的,不过仅仅是为了得到结果还是可以使用的。