大哥们,如何利用js限制textbox只能输入数字呢, 无法输入汉字,字母,和全角状态下的数字

解决方案 »

  1.   

    <input type=text onkeypress="if(event.keyCode<47 || event.keyCode>57)return false;">
      

  2.   

    <input type=text onkeypress="if(event.keyCode<47 || event.keyCode>57){alert('不可以输入数字');};">
      

  3.   

    <input type=text onkeypress="if(event.keyCode<47 || event.keyCode>57)return false;">
      

  4.   

    这个方法不能输入小数点的,我自己再写公司的项目的时候,写了一个方法,可供参考。function valiNum(code,str,obj){
    if (str=="")
    str="0123456789";
    if (str==".")
    str="0123456789.";
    var ch=String.fromCharCode(code);
    if ((str.indexOf(ch)==-1)
    ||(str=="0123456789."&&isNaN(obj.value+ch))){
    //因为要避免重复输入小数点,所以要加这个判断
    alert("输入的字符不符合要求,请重新输入!"+ch);
    obj.focus();
    return false;

    obj.focus();
    return true;
    }调用的文本框:
    <input type=text onkeypress="return(valiNum(event.keyCode, '',this))">
    如允许输入小数点的:
    <input type=text onkeypress="return(valiNum(event.keyCode, '.',this))">
      

  5.   

    如果确实要限制全角状态或者汉字的输入,你可以把onkeypress改为onkeydown,但这样的话,左右光标键和删除、倒格都不能用了。要写一个更详细的function才可以。
      

  6.   

    昨天回复了LZ的贴子之后,奋战了几个小时,写了一个测试的页面,里面的valiNum应该就是LZ想要的内容,只要把里面obj1的内容去掉即可。如果还有更好的方法,欢迎各位高手不吝赐教,一起交流。<html><head>
    <meta http-equiv="Content-Language" content="zh-cn">
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>测试onkey事件</title>
    <script>
    function test(obj0,code, obj1){
    obj1.value+=code+"\n";
    if (obj0.value.length>10&&code!=8&&code!=46
    &&code!=37&&code!=39)
    return false;
    }
    function valiNum(obj0,code,obj1,dot){
    obj1.value+=code+"\n";
    if (code==8||code==9||code==46||(code>32&&code<41))
    return true;
    if (obj0.value.length>10)
    return false;
    if (code>47&&code<58)
    return true;
    if (dot=="."&&code==190)
    if (isNaN(obj0.value+"."))
    return false;
    else
    return true;
    return false;
    }
    </script>
    </head><body>
    <table border="1" width="80%" id="table1" height="231"><tbody align=center>
    <tr>
    <td colspan="2" height="31">onkeypress事件</td>
    <td colspan="2" height="31">onkeydown事件</td>
    <td colspan="2" height="31">onkeyup事件</td>
    <td colspan="2" height="31">校验数字</td>
    </tr><tr>
    <td>按键key</td><td>键值keyCode</td>
    <td>按键key</td><td>键值keyCode</td>
    <td>按键key</td><td>键值keyCode</td>
    <td>按键key</td><td>键值keyCode</td>
    </tr><tr>
    <td><textarea cols=8 rows=13 onkeypress="return(test(this,event.keyCode, b))"></textarea></td>
    <td><textarea cols=8 rows=13 id=b></textarea></td>
    <td><textarea cols=8 rows=13 onkeydown="return(test(this,event.keyCode, d))"></textarea></td>
    <td><textarea cols=8 rows=13 id=d></textarea></td>
    <td><textarea cols=8 rows=13 onkeyup="return(test(this,event.keyCode, f))"></textarea></td>
    <td><textarea cols=8 rows=13 id=f></textarea></td>
    <td><textarea cols=8 rows=13 onkeydown="return(valiNum(this,event.keyCode, g,'.'))"></textarea></td>
    <td><textarea cols=8 rows=13 id=g></textarea></td>
    </tr></tbody>
    </table>
    </body></html>
      

  7.   

    这样不好吧,复制进去就不能限制了,
    我还是倾向搞一个临时变量,在valuechange时用isNaN()来判断控件的value,如果不对,就把临时变量整回去
    如果不让显示错误的输入,keyup时判断也可以
      

  8.   

    我试过了,按Ctrl-C的可以限制,用鼠标粘贴的就不行。
    还有keyup是不能发辉作用的,例如如果你长按一个键,例如是“A的”的话,就会出来很多个A字母的。另外,可以在要输入的textarea里面增加一个 onpaste="return(false)" 属性,就能防止所有粘贴行为了。
      

  9.   

    <script type="text/javascript">
            //只能输入数字
            function InputNumber(obj) {
                if (event.keyCode < 48 || event.keyCode > 57) {
                    window.event.returnValue = false;
                }
                obj.onpaste=function(){
                    return false;
                }
            }
    </script>
    <input type="text" style="ime-mode: disabled;" onkeypress="InputNumber(this);" />
      

  10.   


    <input type="text" style="ime-mode: disabled;" onkeyup="if(isNaN(value) execCommand('undo');" onafterpaste="if(isNaN(value) execCommand('undo');"/>
      

  11.   

    <textarea name="aa" onkeyup="this.value=this.value.replace(/\D/g,'')"></textarea>
    这样就可以啦,试试吧
      

  12.   

    我根据各位网友的代码,综合了一个function。
    这个funciton,可以使用光标键、删除键和倒格键和小数点。但还是有点瑕疵,就是输入第二个小数点的时候,不能正确判断是前面还是后面的小数点。不知道哪位知道,怎么可以判断所在的那个字符串的位置?<html>
    <script>
    function valiNum2(code,dot,obj){
    //dot,如果可以使用小数点,则为“.”,否则为空
    if (code==8||code==9||code==46||(code>32&&code<41))
    return true;
    if (code>47&&code<58)
    return true;
    //var ch=String.fromCharCode(code); 因为考虑到粘贴的操作,所以不能用字符输入来判断
    var v=obj.value;
    //alert(v+", "+isNaN(v));
    if (dot=="."&&code==190)
    if (isNaN(v)){
    //execCommand('undo');不知道为何,放这里没有反应
    obj.value=v.replace(".","");
    return;
    }else
    return true;
    obj.value=v.replace(/\D/g,'');
    }
    </script>
    </head><body><input onkeyup="return(valiNum2(event.keyCode,'.',this))">
    </body></html>
      

  13.   

    漏了一些东西,代码里面漏了<head>;
    另外,我想问的问题是,在onkeyup的情况下,怎么判断光标所在的那个字符串的位置,也就是说,刚刚输入的那个小数点,是否是第二个小数点,如果是的话,把这个小数点去掉;或者用execCommand('undo')来撤销操作。
    如果没有办法判断第二个小数点的话,就只能加多一个onkeydown事件来拦截了。