Input钱币规范化

  要求限制input的输入内容,只有输入0-9的数字,backspace,delete,小数点,还有左右移动有效,reFormat函数用于input得到光标时将带逗号的金钱格式转化为没有逗号的字符串,amountInput函数用于控制input能输入的数值大小,其中num指的是小数点后的数字位数,max为小数点之前的数字位数。formatMoney函数用于将字符串转化为对应的金钱格式。

 

  html

  

<input type="text" style="width:200px;ime-mode:disabled;"  onkeydown="return test(event,this,3,3);" onblur="formatMoney(this,3);" onfocus="reFormat(this)" >

 

  js

<script>     
function reFormat(obj){
    var CaretPos = 0; 
    var afterFormat;
    if (document.selection) { // IE Support 
            obj.focus(); 
            var Sel = document.selection.createRange(); 
            Sel.moveStart('character', -obj.value.length); 
            CaretPos = Sel.text.length; 
        }else if(obj.selectionStart || obj.selectionStart == '0'){// Firefox support 
            CaretPos = obj.selectionStart; 
    } 
    var strj=obj.value.substring(0,CaretPos);
    var arrj=strj.match(",");
    if(arrj!=null){
        afterFormat=CaretPos-arrj.length;
    }else{
        afterFormat=CaretPos;
    }
    var String=obj.value;
    obj.value=String.replace(/,/g, ""); //删除逗号
    if(obj.setSelectionRange){ //光标定位
        obj.focus();
        obj.setSelectionRange(afterFormat,afterFormat);
    }
    else if (obj.createTextRange) {
        var range = obj.createTextRange();
        range.collapse(true);
        range.moveEnd('character', afterFormat);
        range.moveStart('character', afterFormat);
        range.select();
    }
}
function amountInput(event,obj,num,max){
    var n=obj.value;
    var pointPastion=n.lastIndexOf(".");
    var CaretPos = 0; 
    var selectLength;
    var selectValue;
    var numAfterPoint=n.length-pointPastion;
    if (document.selection) { // IE Support 
            obj.focus(); 
            var Sel = document.selection.createRange(); 
            Sel.moveStart('character', -obj.value.length); 
            CaretPos = Sel.text.length; 
            selectLength=document.selection.createRange().text.length;  
            selectValue=document.selection.createRange().text;
        }else if(obj.selectionStart || obj.selectionStart == '0'){// Firefox support 
            CaretPos = obj.selectionStart; 
            if(obj.selectionStart != undefined && obj.selectionEnd != undefined) { 
                selectLength=obj.value.substring(obj.selectionStart, obj.selectionEnd).length; 
                selectValue=obj.value.substring(obj.selectionStart, obj.selectionEnd);
            } else { 
                selectLength=0;
                selectValue="";
            } 
    } 
    if(selectLength!=0){//覆盖
        if(selectValue.lastIndexOf(".")>=0){//有点
            if((n.length-selectLength)<max){//剩余长度小于MAX
                if(event.keyCode >= 48 && event.keyCode <= 57){
                    return true;
                }
                if (event.keyCode >= 96 && event.keyCode <= 105) {
                    return true;
                }
                if (event.keyCode == 8 || event.keyCode == 46 || event.keyCode == 37 || event.keyCode == 39) {
                    return true;
                }
            }else if((n.length-selectLength)>max){//剩余长度大于MAX
                if (event.keyCode == 37 || event.keyCode == 39) {
                    return true;
                }
            }else{//剩余度等于MAX
                if (event.keyCode == 8 || event.keyCode == 46 || event.keyCode == 37 || event.keyCode == 39) {
                    return true;
                }
            }
        }else{//无点
            if(event.keyCode >= 48 && event.keyCode <= 57){
                return true;
            }
            if (event.keyCode >= 96 && event.keyCode <= 105) {
                return true;
            }
            if (event.keyCode == 8 || event.keyCode == 46 || event.keyCode == 37 || event.keyCode == 39) {
                return true;
            }
        }
    }else{//插入
        if(pointPastion>=0){//有点
            if(CaretPos>pointPastion){//右边
                if(numAfterPoint>num){//AfterNum>num
                    if(CaretPos==(pointPastion+1)){//点右边
                        if((n.split(".")[0].length+n.split(".")[1].length)<=max){//B+A<=Max
                            if (event.keyCode == 8 || event.keyCode == 46 || event.keyCode == 37 || event.keyCode == 39) {
                                return true;
                            }
                        }else{//B+A>Max
                            if (event.keyCode == 46 || event.keyCode == 37 || event.keyCode == 39) {
                                return true;
                            }
                        }
                    }else{//非点右边
                        if (event.keyCode == 8 || event.keyCode == 46 || event.keyCode == 37 || event.keyCode == 39) {
                            return true;
                        }
                    }
                }else{//AfterNum<num
                    if(CaretPos==(pointPastion+1)){//点右边
                        if((n.split(".")[0].length+n.split(".")[1].length)<=max){//B+A<=Max
                            if(event.keyCode >= 48 && event.keyCode <= 57){
                                return true;
                            }
                            if (event.keyCode >= 96 && event.keyCode <= 105) {
                                return true;
                            }
                            if (event.keyCode == 8 || event.keyCode == 46 || event.keyCode == 37 || event.keyCode == 39) {
                                return true;
                            }
                        }else{//B+A>Max
                            if(event.keyCode >= 48 && event.keyCode <= 57){
                                return true;
                            }
                            if (event.keyCode >= 96 && event.keyCode <= 105) {
                                return true;
                            }
                            if (event.keyCode == 46 || event.keyCode == 37 || event.keyCode == 39) {
                                return true;
                            }
                        }
                    }else{//非点右边
                        if(event.keyCode >= 48 && event.keyCode <= 57){
                                return true;
                        }
                        if (event.keyCode >= 96 && event.keyCode <= 105) {
                            return true;
                        }
                        if (event.keyCode == 8 || event.keyCode == 46 || event.keyCode == 37 || event.keyCode == 39) {
                            return true;
                        }
                    }
                }
            }else{//左边
                if(n.split(".")[0].length>=max){//left>=max
                    if(CaretPos==pointPastion){//点左边
                        if((n.split(".")[0].length+n.split(".")[1].length)<=max){//sum<=max
                            if (event.keyCode == 8 || event.keyCode == 46 || event.keyCode == 37 || event.keyCode == 39) {
                                return true;
                            }
                        }else{//sum>max
                            if (event.keyCode == 8 || event.keyCode == 37 || event.keyCode == 39) {
                                return true;
                            }
                        }
                    }else{//非点左边
                        if (event.keyCode == 8 || event.keyCode == 46 || event.keyCode == 37 || event.keyCode == 39) {
                            return true;
                        }
                    }
                }else{//left<max
                    if(CaretPos==pointPastion){//点左边
                        if((n.split(".")[0].length+n.split(".")[1].length)<=max){//sum<=max
                            if(event.keyCode >= 48 && event.keyCode <= 57){
                                return true;
                            }
                            if (event.keyCode >= 96 && event.keyCode <= 105) {
                                return true;
                            }
                            if (event.keyCode == 8 || event.keyCode == 46 || event.keyCode == 37 || event.keyCode == 39) {
                                return true;
                            }
                        }else{//sum>max
                            if(event.keyCode >= 48 && event.keyCode <= 57){
                                return true;
                            }
                            if (event.keyCode >= 96 && event.keyCode <= 105) {
                                return true;
                            }
                            if (event.keyCode == 8 || event.keyCode == 37 || event.keyCode == 39) {
                                return true;
                            }
                        }
                    }else{//非点左边
                        if(event.keyCode >= 48 && event.keyCode <= 57){
                            return true;
                        }
                        if (event.keyCode >= 96 && event.keyCode <= 105) {
                            return true;
                        }
                        if (event.keyCode == 8 || event.keyCode == 46 || event.keyCode == 37 || event.keyCode == 39) {
                            return true;
                        }
                    }
                }
            }
        }else{//无点
            var bPos=n.length-CaretPos;
            if(bPos<(num+1)){
                if (event.keyCode == 110 || event.keyCode == 190){
                    return true;
                }
            }
            if(n.length>=max){//超长
                if (event.keyCode == 8 || event.keyCode == 46 || event.keyCode == 37 || event.keyCode == 39) {
                    return true;
                }
            }else{//未超长
                if(event.keyCode >= 48 && event.keyCode <= 57){
                    return true;
                }
                if (event.keyCode >= 96 && event.keyCode <= 105) {
                    return true;
                }
                if (event.keyCode == 8 || event.keyCode == 46 || event.keyCode == 37 || event.keyCode == 39) {
                    return true;
                }
            }
        }
    }
return false;
}
function formatMoney(obj, n){
        s=obj.value;
        n = n > 0 && n <= 20 ? n : 2;  
        s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";
        var l = s.split(".")[0].split("").reverse();
        var r = s.split(".")[1];
        var t = "";
        for(var i = 0; i < l.length; i ++ ) {  
           t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");  
        }  
        if(obj.value.length==0){
            obj.value="0."
            for(var i=0;i<n;i++){
                obj.value+="0";
            }
        }else{
            obj.value=t.split("").reverse().join("") + "." + r;  
        }
        
    }
</script>

 

posted @ 2016-06-28 14:48  joesmile  阅读(653)  评论(0编辑  收藏  举报