RT。
今天测试那边提了一个这样的需求,我在网上找了一大堆。但是确发现基本上都是不可用的,发现一个可用的呢,但是确有一个小bug,就是有时候 小数点和删除键 需要点击两次。这个JS的代码如下
<input onkeypress="return t();" onpaste="return false"/>
 function t(){  
 //获取事件 注意:在mozilla下 出发事件的函数不能带参数  
 var evt = getEvent();  
 var rest = false;  
 if(evt){  
     rest = true;  
     //获取事件源的对象  
     var element = evt.srcElement || evt.target;  
     //获取事件源的对象(这里的事件源对象是 文本框)  
     evt = evt.keyCode || evt.charCode;  
     //获取 文本框的值  
     var text = element.value;  
     if(evt!=8 && evt!=13){  
         //按下是否是 “.” 并只允许按下一个  
         if(evt == 46){  
             if(text || text != ''){  
                 if(!(/^\d+$/g.test(text)))  
                     rest = false;  
             }else{  
                 rest =false;  
             }  
         //按下是否是数字键 退格键 回车键  
         }else if(evt < 48 || evt > 57){  
             rest = false;  
         }  
     }  
 }  
 return rest;  
 }  
   
 /** 
 * @ 获取事件(鼠标、键盘)在火狐下触发函数不能带参数 
 * @ 兼容 IE Mozilla Google Maxthon Opera 
 * @ return key/null 
 */  
 function getEvent(){  
  if(document.all){  
       return window.event;//IE  
  }else{//FF  
   func = getEvent.caller;  
    while(func != null){  
         var arg0 = func.arguments[0];  
         if(arg0)  
             return arg0;  
         func = func.caller;  
     }  
     return null;  
  }  
 }

解决方案 »

  1.   

    用正则 onpropertychange 和 oninput事件
     验证失败 则 renturnValue false
      

  2.   

    <script>
    function t(){
    var event = t.caller &&  t.caller.arguments[0] || window.event;
    var code = event.keyCode;
    var input = document.getElementById("input");
    switch( code ){
    case 8 : return;
    case 109 : 
    case 189 : return input.value.length==0;
    case 110 :
    case 190 : return input.value.indexOf(".") == -1;
    default : return !(code<48 || code>57 && code<96 || code>105)
    }
    }
    </script>
    <input onkeydown="return t();" onpaste="return false" id="input"/>