下面js是验证表单只能输入数字的,但是用键盘左右键的时候,一直跳到文字的最后,请问这要怎么改呢,谢谢function inp(obj){
var regStrs = [ 
 ['^0(\\d+)', '$1'], //禁止录入整数部分两位以上,但首位为0 
 ['[^0-9\]', ''] //禁止录入任何非数字和点 
]; 
 for(i=0; i<regStrs.length; i++){ 
 var reg = new RegExp(regStrs[i][0]); 
 obj.value = obj.value.replace(reg, regStrs[i][1]); 
 } 
}
<input name="" type="text"  value="" onKeyUp="inp(this)">

解决方案 »

  1.   


    var _value = "";
    function inp(obj){
    if(_value==obj.value) return;
    var regStrs = [ 
     ['^0(\\d+)', '$1'], //禁止录入整数部分两位以上,但首位为0 
     ['[^0-9\]', ''] //禁止录入任何非数字和点 
    ]; 
     for(i=0; i<regStrs.length; i++){ 
     var reg = new RegExp(regStrs[i][0],"g"); 
     obj.value = obj.value.replace(reg, regStrs[i][1]); 
     } 
     _value = obj.value;
    }
      

  2.   

    要想光标一直在最后 可以先清空 在重新赋值就是在最后了var obj=document.getElementById("testId");
    var val=obj.value;
    //obj.focus();
    bj.value="";
    obj.value=val;
      

  3.   

    http://lives.iteye.com/blog/1397939
      

  4.   

    //原因是因为每按一下键盘都触发正则,并对输入框赋值,所以光标老是跑到最后。(FF不会)
    //解决方法:判断输入框的值有没有变化才触发正则替换。
    <input name="" type="text"  value="" onKeyUp="inp(this)">
    <script type="text/javascript">
        var v="";
        function inp(obj){
            if(obj.value!=v){
                v=obj.value;
                obj.value=obj.value.replace(/^0(\d+)+/g,'$1').replace(/[^\d\.]/g,'');
            }
        }
    </script>
      

  5.   

    直接在你的输入框后面加上onKeyUp="value=value.replace(/[^1234567890]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^1234567890]/g,''))"