解决方案 »

  1.   

    function onlyNum(){
    if((event.keyCode>57||event.keyCode<48)&&event.keyCode!=46)
    {
    alert('请输入数字!');
    window.event.keyCode = 0 ;
    }
    }
    function limitDecimal(obj,length,event)
    {
     var e = window.event || event;
     if(obj.value.indexOf(".") == -1 || obj.value.indexOf(".") > length)return false;//如果小数点在数字两侧
     if(e.keyCode == 37)return false;//解决光标向左移动的问题
     var index = obj.value.indexOf(".");//获得“.”的位置
     if(obj.value.length-index-1 < length)return false;//不知道这句话是做什么的。
     if(obj.value.substr(index+1,length)!=0 && obj.value.substr(index+1,length)!=5 ){
      obj.value = obj.value.substring(0,index) + obj.value.substr(index,length);
      alert('请输入数字,小数位可以是0.5!');
     }
     obj.value = obj.value.substring(0,index) + obj.value.substr(index,length+1);
     num();
     return false;
    }这个是现在用的控制函数,不能满足要求!
      

  2.   

    我也想到数组了,是不是用indexOf() 函数来做判断?
      

  3.   

    因为各输入框的控制条件不相同
    所以判定函数 onlyNum 应传入或俘获当前控件
    这样才能根据不同的对象做相应的检查处理你的 onlyNum 是由按键事件触发的,这样 0.5 就不是很好处理(3次按键)
    可改由失去焦点时触发
      

  4.   

    本帖最后由 showbo 于 2014-05-15 11:10:46 编辑
      

  5.   

    正则如下,不过个人觉得还是下拉框比较好。 <INPUT TYPE="text" NAME="" onkeyup="fun(0,this)">
     <INPUT TYPE="text" NAME="" onkeyup="fun(1,this)">
     <INPUT TYPE="text" NAME="" onkeyup="fun(2,this)">
     <INPUT TYPE="text" NAME="" onkeyup="fun(3,this)">
    function fun(type, obj){
    var arr = ["^(4|3|2)$", "^(3|2|1|0)$", "^(2|1|0)$", "^(1|(0\.5)|0|0\.)$"]; 
    var reg = new RegExp(arr[type]);
    if (!reg.test(obj.value))
    {
    alert("请填写正确的值");
    obj.select();
    }