如果有能判断当前光标位置方法也可以,如果光标在中间,就用onkeyup

解决方案 »

  1.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> 数字输入控制,给数字加上千分符 </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT="">
    <style>
    .inputRight {
     text-align: right;
     border: 1px #666666  dashed;  
     font-size: 9pt; 
     color: #993366; 
     height: 18px; 
     ime-mode : disabled;
    }
    </style>
    <SCRIPT LANGUAGE="JavaScript">
    /*
    这些功能建议通过HTC来实现
    */
    ////////////
    //数字输入控制
    function FormatInput(dotlen)
    {
    var myEle=event.srcElement;
    var myValue=String.fromCharCode(event.keyCode);
    if (myEle.readOnly)
    {
    return;
    }
    switch(dotlen)
    {
    //原正则表达式(可以输入负数):/^[\-]?\d*\.?\d{0,0}$/
    case 0:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,0}$/,  myValue); break;}
    case 1:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,1}$/,  myValue); break;}
    case 2:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,2}$/,  myValue); break;}
    case 3:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,3}$/,  myValue); break;}
    case 4:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,4}$/,  myValue); break;}
    case 5:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,5}$/,  myValue); break;}
    case 6:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,6}$/,  myValue); break;}
    case 7:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,7}$/,  myValue); break;}
    case 8:{event.returnValue = regInput(myEle, /^\d*\.?\d{0,8}$/,  myValue); break;}
    default :{event.returnValue = regInput(myEle, /^\d*\.?\d{0,0}$/,  myValue); break;}
    }
    }
    function regInput(obj, reg, inputStr)
    {
    var docSel = document.selection.createRange()
    if (docSel.parentElement().tagName != "INPUT") return false
    oSel = docSel.duplicate()
    oSel.text = ""
    var srcRange = obj.createTextRange()

    oSel.setEndPoint("StartToStart", srcRange)
    var str = oSel.text + inputStr + srcRange.text.substr(oSel.text.length)
    return reg.test(str)
    }
    //给数字加上千分符 by yuanzy 
    function splitNumber(eValue)
    {
    var intPart = "";
    var decPart = "";
    if (eValue.indexOf(",")>=0)
    {
    eValue=eValue.replace(/,/g,"");
    }
    if (eValue.indexOf(".")>=0)
    {
    intPart=eValue.split(".")[0];
    decPart=eValue.split(".")[1];
    }
    else
    {
    intPart = eValue;
    }
    var num  =  intPart+"";  
        var  re=/(-?\d+)(\d{3})/  
        while(re.test(num)){  
    num=num.replace(re,"$1,$2")  
        }  
    if (eValue.indexOf(".")>=0)
    {
    eValue=num + "." + decPart;
    }
    else
    {
    eValue=num ;
    }
    return eValue;
    }function oFocus()
    {
    if (event.srcElement.readOnly) return;
    event.srcElement.value=event.srcElement.value.replace(/,/g,"");
    }function oBlur()
    {
    if (event.srcElement.value=="-")
    {
    event.srcElement.value="";
    }
    event.srcElement.value = splitNumber(event.srcElement.value);
    }</SCRIPT>
    </HEAD><BODY><input class="inputRight" type='text'  onfocus="oFocus();" onblur="oBlur();" onKeypress="FormatInput(2);" >
    </BODY>
    </HTML>
      

  2.   

    给你个思路吧
    <input name=haha onkeydown="show(this)" onkeyup=show2(this)>
    <script language=javascript>
    function show(obj)
    {
    //alert(event.keyCode);
    if(((event.keyCode<48)||(event.keyCode>57))&&(event.keyCode!=8))
    {
    event.returnValue=false;
    }
    }
    function show2(obj)
    {
                       //在这里分数字,这样你的问题都解决了
    alert(obj.value);
    }
    </script>
      

  3.   

    大家先看看我这个,代码好不好看不用管了,基本上实现了这些功能。
    就是一个缺点,在中间插入一个数字以后,光标会自动跑到末尾,我想解决这个。
    <input style="text-align:right" name="money" type="text" maxlength="18" size="20" onkeydown="if(event.keyCode>47 && event.keyCode<58 && this.value.length<18 && getCaretPos(this)==1) tax1(this);" onkeyup="if(event.keyCode==46 || event.keyCode==8 || (event.keyCode>47 && getCaretPos(this)==0)) taxInsert(this);getTax(this,document.all.tax);" value="2,100,000" /><br>
    <input style="text-align:right" name="tax" type="text" maxlength="18" value="105,000">
    <script>
    function  getCaretPos(obj){  
     var  workRange=document.selection.createRange();  
     var  allRange=obj.createTextRange();  
     workRange.setEndPoint('StartToStart',allRange);  
     len=workRange.text.length;  
     if  (len  >=  obj.value.length)  
    return 1;
     else  
    return 0;
    }
    function taxInsert(obj1){
    var m = obj1.value;
    m = m.replace(/,/g, '');
    if (m == '') {obj1.value = '';}
    else{
    if (!isNaN(m)){
    m = String(Number(m));
    obj1.value = commaInsert(m);
    setCare(obj1);
    }
    }
    }

    function tax1(obj1){
    var m = obj1.value;
    m = m.replace(/,/g, '');
    if (m == '') {obj1.value = '';}
    else{
    if (!isNaN(m)){
    m = String(Number(m));
    obj1.value = comma1(m);
    }
    }
    }

    function getTax(obj1,obj2){
    var m = obj1.value;
    m = m.replace(/,/g, '');
    if (m == '') {obj2.value = '';}
    else{
    if (!isNaN(m)){
    m = String(Number(m));
    obj2.value = commaInsert(Math.floor(m*0.05));
    }
    }
    }

    function comma1(value){
    var str =String(value).replace(/,/g, '');
    if (str=='NaN') return '';
    str = str.replace('-','');
    str = str.replace(/,/g, '');
    if(!check(str)) return str;
    var yen ='';
    for(i=0;i<str.length;i++){
    if(i && !((str.length-i+1) % 3)) yen+=',';
    yen+=str.charAt(i);
    }
    return yen;
    }
    function commaInsert(value){
    var str =String(value).replace(/,/g, '');
    if (str=='NaN') return '';
    str = str.replace('-','');
    str = str.replace(/,/g, '');
    if(!check(str)) return str;
    var yen ='';
    for(i=0;i<str.length;i++){
    if(i && !((str.length-i) % 3)) yen+=',';
    yen+=str.charAt(i);
    }
    return yen;
    }
    function check(value){
    if (isNaN(value)) return false;
    var a,b;
    a = value.toString();
    b = a.indexOf('.');
    if(b!=-1){
    return false;}
    return true;
    }
    </script>
      

  4.   

    setCare(obj1);去掉,是我正在修改中的东西。
      

  5.   

    写的乱糟糟,基本实现了。就是应付不了拷贝过来的数字。如果拷贝了一个很长的没有逗号的数字,要在中间插入数字,光标位置会出错。另外,不能全选之后删除了。我脑袋已经大了,有高手帮忙没有。
    <input style="text-align:right;font:20" name="money" type="text" size="100"  
    onkeydown="tmpStr=this.value;if(getPos(this)==-1 && event.keyCode>47 && event.keyCode<58) {tax1(this);};if(po==-1 && event.keyCode==8){tax3(this);}" 
    onkeyup="if( (event.keyCode==8 && po!=-1) || (event.keyCode>47 && po!=-1)) {taxInsert(this,1)};if(event.keyCode==46) {taxInsert(this,0);}getTax(this,document.all.tax);"><br>
    <input style="text-align:right;font:20" name="tax" type="text" size="100"" value="105,000">
    <script>
    var po;
    var tmpStr='';
    function getPos(obj){
     var workRange=document.selection.createRange();
     obj.select();
     var allRange=document.selection.createRange();
     workRange.setEndPoint("StartToStart",allRange);
     var len=workRange.text.length;
     workRange.collapse(false);
     workRange.select();
     if (len >= obj.value.length) {
     po=-1;
     return -1;} 
     else
     {po=len;
     return len;}
    }function setPos(obj,num){
    var rng=obj.createTextRange()
    rng.moveStart("character",Number(num))
    rng.collapse();
    rng.select();
    }
    function taxInsert(obj1,flag){
    var m = obj1.value;
    m = m.replace(/,/g, '');
    if (m == '') {obj1.value = '';}
    else{
    if (!isNaN(m)){
    m = String(Number(m));
    obj1.value = commaInsert(m);
    if (po !=-1){
    if (flag==1)
    setPos(obj1,po+obj1.value.length-tmpStr.length);
    else
    setPos(obj1,po+obj1.value.length-tmpStr.length+1);
    }
    }
    }
    }
    function tax3(obj1){
             var m = obj1.value;
             m = m.replace(/,/g, '');
             if (m == '') {obj1.value = '';}
             else{
             if (!isNaN(m)){
              m = String(Number(m));
              obj1.value = comma3(m);
             }
                }
                }
                function comma3(value){
                var str =String(value).replace(/,/g, '');
                if (str=='NaN') return '';
                str = str.replace('-','');
                str = str.replace(/,/g, '');
                if(!check(str)) return str;
                var yen ='';
                for(i=0;i<str.length;i++){
                 if(i && !((str.length-i-1) % 3) && i != str.length-1) yen+=',';
                 yen+=str.charAt(i);
                }
                return yen;
        }
    function tax1(obj1){
    var m = obj1.value;
    m = m.replace(/,/g, '');
    if (m == '') {obj1.value = '';}
    else{
    if (!isNaN(m)){
    m = String(Number(m));
    obj1.value = comma1(m);
    }
    }
    }

    function getTax(obj1,obj2){
    var m = obj1.value;
    m = m.replace(/,/g, '');
    if (m == '') {obj2.value = '';}
    else{
    if (!isNaN(m)){
    m = String(Number(m));
    obj2.value = commaInsert(Math.floor(m*0.05));
    }
    }
    }

    function comma1(value){
    var str =String(value).replace(/,/g, '');
    if (str=='NaN') return '';
    str = str.replace('-','');
    str = str.replace(/,/g, '');
    if(!check(str)) return str;
    var yen ='';
    for(i=0;i<str.length;i++){
    if(i && !((str.length-i+1) % 3)) yen+=',';
    yen+=str.charAt(i);
    }
    return yen;
    }
    function commaInsert(value){
    var str =String(value).replace(/,/g, '');
    if (str=='NaN') return '';
    str = str.replace('-','');
    str = str.replace(/,/g, '');
    if(!check(str)) return str;
    var yen ='';
    for(i=0;i<str.length;i++){
    if(i && !((str.length-i) % 3)) yen+=',';
    yen+=str.charAt(i);
    }
    return yen;
    }
    function check(value){
    if (isNaN(value)) return false;
    var a,b;
    a = value.toString();
    b = a.indexOf('.');
    if(b!=-1){
    return false;}
    return true;
    }
    </script>
      

  6.   

    你要是闲烦的话干脆就不让他拷贝,加onpaste="return false"就可以了
      

  7.   

    function oPaste(e)
    {
    event.returnValue=regInput(e, /^[\-]?\d*\.?\d{0,8}$/,  window.clipboardData.getData('Text'));

    }
    function oDrop(e)
    {
    event.returnValue=regInput(e, /^[\-]?\d*\.?\d{0,8}$/,  event.dataTransfer.getData('Text'));
    } onPaste="oPaste(this);" onDrop="oDrop(this);"