我想在输入文本字段中只允许数字和小数。 如果我在一个按键事件中使用我的代码它工作正常(输入字母时返回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中使用时,它确实允许使用字母表。
答案 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