为什么我的文本框还能输入小数点后2为呢?我本来是要小数点后1位的。请大侠们帮忙。
<html>
<body>
<script>
function checkNumber(e,txt){
    var key = window.event ? e.keyCode : e.which;
    var keychar = String.fromCharCode(key);
    var el = document.getElementById('test');
    var msg = document.getElementById('msg');
    var reg = /^(\d)*(\.(\d){0,1})?$/;    var result = reg.test(keychar);
    if(result){
if(e.keyCode==46)
result=!(txt.value.split('.').length>1);
else
result=!(txt.value.split('.').length>1&&txt.value.split('.')[1].length>1);
}
if(!result){
el.className = "warn";
msg.innerHTML = "只能输入数字";
return false;
}
else{
el.className = "";
msg.innerHTML = "";
return true;
}
}
</script>
<div id="test">
        只能输入数字的文本框<input type="text" name="question.page" onkeypress="return checkNumber(event,this);">
        <span id="msg"></span>
        </div>
</body></html>

解决方案 »

  1.   

    <html> 
    <body> 
    <script> 
    function checkNumber(e,txt){ 
        var key = window.event ? e.keyCode : e.which; 
        var keychar = String.fromCharCode(key); 
        var el = document.getElementById('test'); 
        var msg = document.getElementById('msg'); 
        var reg = /^\d*\.?$/;     var result = reg.test(txt.value); 
        if(result && (!isNaN(keychar) || keychar == ".")){ 
            return;
        } 
        el.className = "warn"; 
        msg.innerHTML = "只能输入数字"; 
        return false; 

    </script> 
    <div id="test"> 
        只能输入数字的文本框:
        <input type="text" name="question.page" onkeypress="return checkNumber(event,this);"> 
         <span id="msg"> </span> 
    </div> 
    </body> 
    </html>
      

  2.   

    上面忘了判断第一个字符和连续输入两个小数点的情况-_-||
    <html> 
    <body> 
    <script> 
    function checkNumber(e,txt){ 
        var key = window.event ? e.keyCode : e.which; 
        var keychar = String.fromCharCode(key); 
        var el = document.getElementById('test'); 
        var msg = document.getElementById('msg'); 
        var reg = /^\d*(\d\.)?$/;     var result = reg.test(txt.value); 
        if(result && !isNaN(keychar)){
            return;
        } 
        if(keychar == "." && txt.value!="" && !/\.$/.test(txt.value)){
            return;
        }
        el.className = "warn"; 
        msg.innerHTML = "只能输入数字"; 
        return false; 

    </script> 
    <div id="test"> 
        只能输入数字的文本框:
        <input type="text" name="question.page" onkeypress="return checkNumber(event,this);"> 
         <span id="msg"> </span> 
    </div> 
    </body> 
    </html>
      

  3.   

    这类即时输入判断最后放在change事件中跟踪input值改变的兼容处理否则用户体验会很差,鼠标右键粘贴你也判断不了,还影响用户正常输入。
      

  4.   

    非常感谢,为什么一选种,再输入就输不进去了,只有用backspace删除后才能输入,能改进吗?
      

  5.   

    在输入框onblur的事件中校验,当前内容是否满足你的需求不就行啦,不满足再把焦点设置到input上
      

  6.   

    能处理Ctrl+V,不能处理鼠标的粘贴
    <html> 
    <body> 
    <script> 
    function checkNumber(txt){ 
        var val = txt.value;
        setTimeout(getfunc(txt),10);
    }
    function getfunc(obj){
        val = obj.value;
        txt = obj;
        function checkVal(){
            reg = /^(\d+(\.\d?)?)?$/;
            if(!reg.test(txt.value)){
                obj.value = val;
                document.getElementById('test').className = "warn";
                document.getElementById('msg').innerHTML = "只能输入数字"
            }
        }
        return checkVal;
    }</script> 
    <div id="test"> 
        只能输入数字的文本框:
        <input type="text" name="question.page" onkeydown="return checkNumber(this);"> 
         <span id="msg"> </span> 
    </div> 
    </body> 
    </html>