JavaScript中的KeyPress和keyup

时间:2016-07-05 20:53:36

标签: javascript

我想在输入文本字段中只允许数字和小数。 如果我在一个按键事件中使用我的代码它工作正常(输入字母时返回false),但是当我使用keyup时它不是。 我的代码:

function OnKeyPress(e,DivID) {

if ( e.which != 8 && e.which != 0  && e.which != 13 && e.which != 190 && (e.which < 48 || e.which > 57)) {
     return false;
                    //  event.preventDefault(); 
   }

   var val = j$('[id$='+DivID+']').val();


   if(DivID == 'ProximityCPPercentage')
   {
       var x = event.which || event.keyCode;
       if(val.indexOf('.') >= 0 && e.which == 46)
          return false;
       else if(e.which == 46 && val.length == 3)
          return false;
       if(val.indexOf('.') == 0)
          val = '0' + val;
       if(e.which != 46)
       {                        
           strval = val + String.fromCharCode(x);
           var re = /^((.|0|[1-9]\d?)(\.\d{1})?|100(\.0?)?)$/;
           if(!re.test(strval))
              return false;
        }
    }              
    else if(val.indexOf('.') >= 0)
    {

        var reg =/^(\d{0,4}\.?(\d{0,1})|\d{0,6})?$/gm;                   
        if(!reg.test(val)) 
        {
            j$('[id$='+DivID+']').val(val.substring(0, val.length - 1));                    
        }

    }                
    else if(e.which != 190 )
    {
        if(val.length > 5)                        
        return false;
    } 

}

如果我在输入字段的onkeypress属性中使用此函数,它不允许使用字母表,但是当我在onkeyup中使用时,它确实允许使用字母表。

1 个答案:

答案 0 :(得分:0)

好的,我创造了一个简单的小提琴,解释了你正在发生的事情https://jsfiddle.net/gb0kwom0/3/

按下键,将在输入中设置值之前捕获事件(结果:警报触发,然后输入值中没有任何内容),请参阅此示例。

<input type="text" onkeypress="return onPress()">

<script>
    function onPress(){alert(); return false;}
</script>

在按键上,将在输入中设置值后捕获事件(结果:值设置然后警报将触发),请参阅此示例。

<input type="text" onkeyup="return onUp()">

<script>
    function onUp(){alert(); return false;}
</script>

因此,要解决您在onKeyUp上的问题,您需要重置该值。

结果将是:将在输入中设置值后捕获事件,然后将值重置为空,请参阅此示例。

注意:此示例仅用于显示差异,不应使用,它会将整个值重置为空

<input type="text" onkeyup="onUp2(this)">

<script>
    function onUp2(obj){alert();  obj.value='';}
</script>

这种方法并不理想,需要更多代码才能正常工作,这就是为什么你应该继续使用onkeypress