用js写的一个形式为##.dd的动态小数掩码问题,可以处理负值 NumberMask

这是一个使用JavaScript编写的NumberMask函数,用于处理形式为##.dd的动态小数掩码,包括负值。函数通过监听键盘事件,实现对输入值的格式化,支持删除、粘贴、剪切等操作,并能处理隐藏的格式化数值。
//带有小数的数字掩码 
var NumberMaskConfig = {
    defaultTextAlign        : 
"center",
    defaultAutoNull            : 
true,
    defaultFormatString        : 
"##.dd",
    defaultHiddenFormatString     : 
"##.dd",
    
// 可用的功能键值数组.
    WORK_KEY            : [8333435363738394046144],
    
// 数字键值数组.
    NUMBER_KEY            : [4849505152535455565796979899100101102103104105]
}
;

function NumberMask(textId, formatString, isAutoNull, hiddenTextId, hiddenNumberFormatString) {
    
if ( textId == null ) {
        
return;
    }

    
this.element = textId;
    
this.element.style.textAlign = NumberMaskConfig.defaultTextAlign;
    
this.document = textId.ownerDocument || textId.document;
    
this.window = this.document.defaultView || this.document.parentWindow;

    
this.hiddenElementId = hiddenTextId;
    
if ( isAutoNull == null ) {
        isAutoNull 
= NumberMaskConfig.defaultAutoNull;
    }

    
this.autoNull = isAutoNull;
    
var oThis = this;
    
this._onKeyDown = function (e) {
        
if ( e == null ) {
            e 
= this.window.event;
        }

        oThis.onKeyDown(e);
    }
;
    
this._onBeforePaste = function (e) {
        
if ( e == null ) {
            e 
= this.window.event;
        }

        oThis.onBeforePaste (e);
    }
;
    
this._onBeforeCut = function (e) {
        
if ( e == null ) {
            e 
= this.window.event;
        }

        oThis.onBeforeCut (e);
    }
;
    
this._onContextMenu = function (e) {
        
if ( e == null ) {
            e 
= this.window.event;
        }

        oThis.onContextMenu (e);
    }
;
    
this._onFocus = function (e) {
        
if ( e == null ) {
            e 
= this.window.event;
        }

        oThis.onFocus (e);
    }
;
    
this._onBlur = function (e) {
        
if ( e == null ) {
            e 
= this.window.event;
        }

        oThis.onBlur (e);
    }
;
    
    
this.initMask( formatString || NumberMaskConfig.defaultFormatString );
    
    
if ( this.hiddenElementId != null ) {
        
this.initHiddenMask( hiddenNumberFormatString || NumberMaskConfig.defaultHiddenFormatString );
    }

    
    
this.initEvent();
    
    
this.initValue(this.element.value);
}


//初始化格式参数.
//
参数:formatString 格式化字符串.
NumberMask.prototype.initMask = function ( formatString ) {
    
// 校验格式字符串,若有误,设置为默认格式.
    if (       ( formatString.indexOf("#">= 0 && formatString.indexOf("#"!= formatString.lastIndexOf("#"- 1 )
        
|| ( formatString.indexOf("d">= 0 && formatString.indexOf("d"!= formatString.lastIndexOf("d"- 1 ) ) {
        
        formatString 
= NumberMaskConfig.defaultFormatString;
    }

    
    
this.maskString = formatString;
    
    
this.integerIndex = formatString.search("##");
    
this.doubleIndex = formatString.search("dd");
}
;

//初始化隐藏项的格式参数.
//
参数:formatString 格式化字符串.
NumberMask.prototype.initHiddenMask = function ( formatString ) {
    
// 校验格式字符串,若有误,设置为默认格式.
    if (       ( formatString.indexOf("#">= 0 && formatString.indexOf("#"!= formatString.lastIndexOf("#"- 1 )
        
|| ( formatString.indexOf("d">= 0 && formatString.indexOf("d"!= formatString.lastIndexOf("d"- 1 ) ) {
        
        formatString 
= NumberMaskConfig.defaultHiddenFormatString;
    }

    
    
this.hiddenMaskString = formatString;
    
    
this.hiddenintegerIndex = formatString.search("##");
    
this.hiddendoubleIndex = formatString.search("dd");
}
;

//初始化事件.
NumberMask.prototype.initEvent = function () {
    
if ( typeof this.element.addEventListener != "undefined" ) {
        
this.element.addEventListener("keydown"this._onKeyDown, false);
        
this.element.addEventListener("beforepaste"this._onBeforePaste, false);
        
this.element.addEventListener("beforecut"this._onBeforeCut, false);
        
this.element.addEventListener("contextmenu"this._onContextMenu, false);
        
this.element.addEventListener("focus"this._onFocus, false);
        
this.element.addEventListener("blur"this._onBlur, false);
    }
 else if ( typeof this.element.attachEvent != "undefined" )    {
        
this.element.attachEvent("onkeydown"this._onKeyDown);
        
this.element.attachEvent("onbeforepaste"this._onBeforePaste);
        
this.element.attachEvent("onbeforecut"this._onBeforeCut);
        
this.element.attachEvent("oncontextmenu"this._onContextMenu);
        
this.element.attachEvent("onfocus"this._onFocus);
        
this.element.attachEvent("onblur"this._onBlur);
    }

}
;

// 初始化默认值.
NumberMask.prototype.initValue = function (aValue) {
    
if ( this.autoNull && (aValue.length <= 0 || aValue == null )) {
        
this.element.value = "";
    }
 else {
        
this.element.value = this.formatTheNumber(aValue);
        
if ( this.autoNull && !this.isValidNumber() ) {
            
this.element.value = "";
        }

    }

    
this.setHiddenValue();
}
;

// 判断键入的是不是数字.
//
 参数:pressKeyCode 从键盘输入值.
//
 返回:true 是数字;false 不是数字.
NumberMask.prototype.isNumberOrMinus = function ( pressKeyCode ) {
    
if ( pressKeyCode == null || typeof(pressKeyCode) != "number" ) {
        
return false;
    }

    
if ( NumberMaskConfig.NUMBER_KEY == null || NumberMaskConfig.NUMBER_KEY.length == 0 ) {
        
return false;
    }

    
for ( var i = 0 ; i < NumberMaskConfig.NUMBER_KEY.length ; i ++ ) {
        
if ( NumberMaskConfig.NUMBER_KEY[i] == pressKeyCode ) {
            
return true;
        }

    }

    
if(pressKeyCode==189||pressKeyCode==109){
     
return true;
    }

    
return false;
}
;

// 判断键入的是不是功能键.
//
 参数:pressKeyCode 从键盘输入值.
//
 返回:true 是;false 不是.
NumberMask.prototype.isKeyValid = function ( pressKeyCode ) {
    
if ( pressKeyCode == null || typeof(pressKeyCode) != "number" ) {
        
return false;
    }

    
if ( NumberMaskConfig.WORK_KEY == null || NumberMaskConfig.WORK_KEY.length == 0 ) {
        
return false;
    }

    
for ( var i = 0 ; i < NumberMaskConfig.WORK_KEY.length ; i ++ ) {
        
if ( NumberMaskConfig.WORK_KEY[i] == pressKeyCode ) {
            
return true;
        }

    }

    
return false;
}
;

// 替换目标字符串中的特定字符串.
//
 参数:objString 目标字符串;sourceString 要替换的字符串;reString 替换后的字符串.
//
 返回:替换完成后的字符串.
NumberMask.prototype.replaceString = function ( objString, sourceString, reString ) {
    
if ( objString == null || objString.length == 0 
        
|| sourceString == null || sourceString.length == 0 
        
|| objString.search(sourceString) < 0 ) {
        
return objString;
    }

    
var frontStr = objString.substr(0, objString.search(sourceString) );
    
var lastStr = objString.substr( objString.search(sourceString) + sourceString.length ) ;
    
return (frontStr || ""+ (reString || "" ) + (lastStr || "") ;
}
;

// 替换目标字符串中的特定位置的字符.
//
 参数:objString 目标字符串;reIndex 制定的位置;reChar 替换后的字符.
//
 返回:替换完成后的字符串.
NumberMask.prototype.replaceChar = function ( objString, reIndex, reChar ) {
    
if ( objString == null || objString.length == 0 
        
|| reIndex < 0 || reIndex > objString.length 
        
|| reChar == null || reChar.length > 1 ) {
        
return objString;
    }

    
var frontStr = objString.substr(0, reIndex );
    
var lastStr = objString.substr( reIndex + 1 );
    
return (frontStr || ""+ reChar + (lastStr || "") ;
}
;

// 格式化数字.
NumberMask.prototype.formatTheNumber = function ( numberString ) {
    
// 输入数字字符串与当前格式不吻合,矫正.
    if ( numberString == null || numberString.length == 0 ) {
        numberString 
= ".";
    }
 
    
var result = this.maskString;
     
var dot=numberString.indexOf(".");
    
if ( this.integerIndex >= 0 ) {
    
var integerString = "";
      
if(numberString.substr(this.integerIndex,dot)!=null&&numberString.substr(this.integerIndex,dot)!=""){
        integerString 
= numberString.substr(this.integerIndex,dot);
      }

        result 
= this.replaceString(result, "##", integerString);

    }

    
if ( this.doubleIndex >= 0 ) {
    
var doubleString = "";
    
if(numberString.substr(dot+1)!=null&&numberString.substr(dot+1)!=""&&numberString.substr(dot+1).length>0){
    
        doubleString 
= numberString.substr(dot+1) ;
    }


        result 
= this.replaceString(result, "dd", doubleString);
    }

    
return result;
}
;

// 移动光标到指定的位置.
//
 参数:direction 移动方向;position 位置,selectAll表示是否选择这个位置之后的文字.
NumberMask.prototype.moveCursor = function ( position, direction, selectAll ) {
    
if ( direction == null ) {
        direction 
= 0;
    }

    
// 如果位置非法,把光标移到最后.
    if ( position < 0 || position > this.element.value.length ) {
        position 
= this.element.value.length;
    }

    
    
if ( direction > 0 ) {
        
// 找当前为之后(包括当前位置)的第一个可编辑位置.
        while ( !this.canInputOrNot(position,this.element.value) && position < this.maskString.length ) {
            position 
++ ;
        }

    }
 else if ( direction < 0 ) {
        
// 找当前为之前(包括当前位置)的第一个可编辑位置.
        while ( !this.canDeleteOrNot(position-1,this.element.value) && position > 0 ) {
            position 
--;
        }

    }
 else {
        
// 绝对位置.
    }

    
    
var objTextRange = this.element.createTextRange();
    objTextRange.moveStart(
"character", position);
    
if ( selectAll == null ) {
        selectAll 
= false;
    }

    
if ( !selectAll ) {
        objTextRange.collapse();
    }

    objTextRange.select();
}
;
//add by ddl
NumberMask.prototype.canDeleteOrNot = function (position,myText){
     
var minus=myText.indexOf("-");
        
if(minus<0){//没有负号
            var dot=myText.indexOf(".");
            
var myInteger=myText.substr(0,dot);
            
var myDouble=myText.substr(dot+1);
            
if(myInteger.length==2&&position==2){
            
return false;
            }

            
if(myDouble.length==2&&position==myText.length){
              
return false;
            }

            
return true;
        }
else{//已经有了负号
            var dot=myText.indexOf(".");
            
var myInteger=myText.substr(0,dot);
            
var myDouble=myText.substr(dot+1);
            
if(myInteger.length==3&&position==3){
             
return false;
            }
 
            
if(myDouble.length==2&&position==myText.length){
              
return false;
            }

            
return true;
            }

}

// 校验指定位置范围的值是否符合数字格式.
NumberMask.prototype.check = function (numberString, position) {
    
return true;
}
;

// 判断指定位置是否可以输入
//
 参数:position 制定的位置.
//
 返回:true 可以输入;false 不可以.
NumberMask.prototype.canInput = function (position) {
    
if ( position < 0 || position >= this.maskString.length ) {
        
return false;
    }

    
    
var currentChar = this.maskString.substr(position , 1 );
    
if (  currentChar == "#" || currentChar == "d"  ) {
        
        
return true;
    }
 else {
        
return false;
    }

}
;
//add by ddl
NumberMask.prototype.canInputOrNot=function (position,myText) {
        
var minus=myText.indexOf("-");
        
if(minus<0){//没有负号
            var dot=myText.indexOf(".");
            
var myInteger=myText.substr(0,dot);
            
var myDouble=myText.substr(dot+1);
            
if(myInteger.length==2&&position==2){
            
return false;
            }

            
if(myDouble.length==2&&position==myText.length){
              
return false;
            }

            
return true;
        }
else{//已经有了负号
            var dot=myText.indexOf(".");
            
var myInteger=myText.substr(0,dot);
            
var myDouble=myText.substr(dot+1);
            
if(position==0){
              
return false;
            }

            
if(myInteger.length==3&&position==3){
             
return false;
            }
 
            
if(myDouble.length==2&&position==myText.length){
              
return false;
            }

            
return true;
        }

}

// 处理选中的字符.把可编辑位置置成零.
//
 参数:selectText 选中的字符; startIndex 在原始值中的开始位置.
//
 返回:处理完成后的字符串.
NumberMask.prototype.dealSelectText = function (selectText, startIndex, myText) {
    
if ( selectText == null || selectText.length == 0 ) {
        
return "";
    }

    
if ( startIndex < 0 || (startIndex + selectText.length) > this.maskString.length ) {
        
return selectText;
    }

    
var count = selectText.length;
    
for ( var i = 0 ; i < count ; i ++ ) {
        
if ( this.canInputOrNot(startIndex + i,myText ) ) {
            selectText 
= this.replaceChar(selectText, i, "0");
        }

    }

    
return selectText;
}
;

// 数字mask的主要实现方法.
NumberMask.prototype.onKeyDown = function (e) {
    
this.elementValue = this.element.value || "";
    
this.pressKeyCode = e.keyCode;
    
    
// 获得当前选中的字符.
    var selectionRange = this.document.selection.createRange();
    
this.selectText = selectionRange.text;
    
    
// 获得当前光标的位置.
    var objTextRange = this.element.createTextRange();
    selectionRange.setEndPoint(
"StartToStart", objTextRange);
    
this.currentPosition = selectionRange.text.length ;

    
if ( this.selectText == null ) {
        
this.selectText = "";
    }

    
    
if ( e.ctrlKey && this.pressKeyCode == 86 ) {
        
// ctrl+v 
        this.onPaste(e);
    }
 else if ( e.ctrlKey && this.pressKeyCode == 67 ) {
        
// ctrl+c 
    }
 else if ( e.ctrlKey && this.pressKeyCode == 88 ) {
        
// ctrl+x 
        this.onCut(e);
    }
 else if ( this.pressKeyCode == 46 ) {
        
// delete 
        this.dealDelete(e);
    }
 else if ( this.pressKeyCode == 8 ) {
        
// backspace -->
        this.dealBackSpace(e);
    }
 else if ( this.pressKeyCode == 9 ) {
        
// tabspace -->
        e.returnValue = true;
    }

    
else if ( this.isNumberOrMinus(this.pressKeyCode) ) {
        
// 数字0-9 或者“-”
        this.dealInputNumber(e);
    }
 else if ( this.isKeyValid(this.pressKeyCode)) {
        
// 其他键盘功能键 
    }
 else {
        
// 其他键 
        e.returnValue = false;
    }

    
    
this.setHiddenValue();
}
;

// 处理输入数字时.
NumberMask.prototype.dealInputNumber = function (e) {
    
    
var frontStr = "";
    
var lastStr = "";
    
var inputNumber = this.pressKeyCode - 96;
    
if ( inputNumber < 0 ) {
        inputNumber 
= this.pressKeyCode - 48;
    }

    
var direction = 1;  //默认向正向移动光标.    
    e.returnValue = false;
    
var newnumberString = "";
    
var checkPosition = this.currentPosition;
    
var newPosition = this.currentPosition;
    
if ( this.selectText.length > 0 ) {
        
//处理批量选择的时候使用
        // 如果选中的字符串是以分割符开始,什么也不做.
        if ( !this.isDotOrNot(this.currentPosition - this.selectText.length,this.elementValue) ) {
            
this.moveCursor(this.currentPosition, 0);
            
return;
        }

        
var frontStr = this.elementValue.substr(0this.currentPosition - this.selectText.length);
        
var lastStr = this.elementValue.substr(this.currentPosition);
        
this.selectText = this.dealSelectText(this.selectText, this.currentPosition - this.selectText.length,this.elementValue);
        
this.selectText = this.replaceChar(this.selectText, 0, inputNumber);
        checkPosition 
-= this.selectText.length;
        newnumberString 
= (frontStr || ""+ inputNumber + (lastStr || "");
        direction 
= 0;
        
this.element.value = this.formatTheNumber(newnumberString);
        
this.moveCursor(newPosition , direction);
    }
 else {
        
//处理输入负号的情况
        if(this.pressKeyCode==189||this.pressKeyCode==109){//输入负号只能在第一个位置
          var minus=this.elementValue.indexOf("-");
          
if(minus>=0){//已经有了负号
           return ;
          }

          
if(this.currentPosition!=0){
            
return ;
          }

          newnumberString
="-"+this.elementValue;
          newPosition
++;
          
this.element.value = this.formatTheNumber(newnumberString);
          
this.moveCursor(newPosition , direction);
        }
else{
            
//处理输入数字的情况
            var minus=this.elementValue.indexOf("-");
            
if(minus<0){//还没有负号
                if(!this.canInputOrNot(this.currentPosition,this.elementValue)){
                 
return ;
                }

                
var dot=this.elementValue.indexOf(".");
                
var myInteger=this.elementValue.substr(0,dot);
                
var myDouble=this.elementValue.substr(dot+1);
                
if(myInteger.length==2&&this.curentPosition==2){
                
return ;
                }

                
if(myDouble.lenth==2&&this.currentPostion==this.elementValue.length){
                  
return ;
                }

                
if(myInteger.length==2&&this.currentPosition<2){
                    frontStr 
= this.elementValue.substr(0this.currentPosition);
                    lastStr 
= this.elementValue.substr(this.currentPosition+1);
                    newnumberString 
= (frontStr || ""+ inputNumber + (lastStr || "");
                    newPosition 
++;
                }
else if(myDouble.length==2&&this.currentPosition>dot){
                    frontStr 
= this.elementValue.substr(0this.currentPosition);
                    lastStr 
= this.elementValue.substr(this.currentPosition+1);
                    newnumberString 
= (frontStr || ""+ inputNumber + (lastStr || "");
                    newPosition 
++;
                }
else{
                frontStr 
= this.elementValue.substr(0this.currentPosition);
                lastStr 
= this.elementValue.substr(this.currentPosition);
                newnumberString 
= (frontStr || ""+ inputNumber + (lastStr || "");
                newPosition 
++;
                }

                
this.element.value = this.formatTheNumber(newnumberString);
                
this.moveCursor(newPosition , direction);
            }
else{//已经有了负号
               if(!this.canInputOrNot(this.currentPosition,this.elementValue)){
                 
return ;
                }

                
var dot=this.elementValue.indexOf(".");
                
var myInteger=this.elementValue.substr(0,dot);
                
var myDouble=this.elementValue.substr(dot+1);
                
if(myInteger.length==3&&this.curentPosition==3){
                
return ;
                }

                
if(myDouble.lenth==2&&this.currentPostion==this.elementValue.length){
                  
return ;
                }

                
if(myInteger.length==3&&this.currentPosition<3){
                    frontStr 
= this.elementValue.substr(0this.currentPosition);
                    lastStr 
= this.elementValue.substr(this.currentPosition+1);
                    newnumberString 
= (frontStr || ""+ inputNumber + (lastStr || "");
                    newPosition 
++;
                }
else if(myDouble.length==2&&this.currentPosition>dot){
                    frontStr 
= this.elementValue.substr(0this.currentPosition);
                    lastStr 
= this.elementValue.substr(this.currentPosition+1);
                    newnumberString 
= (frontStr || ""+ inputNumber + (lastStr || "");
                    newPosition 
++;
                }
else{
                frontStr 
= this.elementValue.substr(0this.currentPosition);
                lastStr 
= this.elementValue.substr(this.currentPosition);
                newnumberString 
= (frontStr || ""+ inputNumber + (lastStr || "");
                newPosition 
++;
                }

                
this.element.value = this.formatTheNumber(newnumberString);
                
this.moveCursor(newPosition , direction);
            }

        }

    }

        
}
;

// 处理粘贴.
NumberMask.prototype.onPaste = function (e) {
    
var pasteValue = this.window.clipboardData.getData("Text");
    e.returnValue 
= false;

    
if ( pasteValue == null || pasteValue.length == 0 ) {
        
return;
    }


    
if ( pasteValue.length > this.maskString.length ) {
        pasteValue 
= pasteValue.substr(0this.maskString.length);
    }

    
for ( var i = 0 ; i < pasteValue.length ; i ++ ) {
        
// 如果当前位置是分割符,但不与格式中的分割符相同.
        if ( !this.isDotOrNot(i,pasteValue) && pasteValue.substr(i, 1!= "." ) {
            
return;
        }

    }

    
var minus=pasteValue.indexOf(".");
    
if(minus<0){
     pasteValue
=pasteValue+".";
    }

    
this.element.value = this.formatTheNumber(pasteValue);
    
this.moveCursor(this.element.value.length);
}
;

// 处理剪切.
NumberMask.prototype.onCut = function ( e ) {

    e.returnValue 
= false;

    
if ( this.selectText.length <= 0 ) {
        
return;        
    }

    
    
var frontStr = "";
    
var lastStr = "";

    
// 如果选中的字符串是以分割符开始,什么也不做.
    if ( !this.isDotOrNot(this.currentPosition - this.selectText.length,this.elementValue) ) {
        
this.moveCursor(this.currentPosition, 0);
        
return;
    }

    
var frontStr = this.elementValue.substr(0this.currentPosition - this.selectText.length);
    
var lastStr = this.elementValue.substr(this.currentPosition);
    
//this.selectText = this.dealSelectText(this.selectText, this.currentPosition - this.selectText.length,this.elementValue);
    var newnumberString = (frontStr || ""+ "" + (lastStr || "");

    
this.element.value = this.formatTheNumber(newnumberString);

    
this.moveCursor(this.currentPosition , 0);
    
// 把选中的数字放入粘贴板.
    this.window.clipboardData.clearData("Text");
    
this.window.clipboardData.setData("Text"this.selectText);
}
;

// 处理删除键.
NumberMask.prototype.dealDelete = function (e) {
    
    
var frontStr = "";
    
var lastStr = "";
    
var direction = 1;  //默认向正向移动光标.    
    e.returnValue = false;
    
    
var newnumberString = "";
    
var newPosition = this.currentPosition;
    
    
if ( this.selectText.length > 0 ) {
        
// 如果选中的字符串是以分割符开始,什么也不做.
        if ( !this.isDotOrNot(this.currentPosition - this.selectText.length,this.elementValue) ) {
            
this.moveCursor(this.currentPosition, 0);
            
return;
        }

        
var frontStr = this.elementValue.substr(0this.currentPosition - this.selectText.length);
        
var lastStr = this.elementValue.substr(this.currentPosition);
        
this.selectText = this.dealSelectText(this.selectText, this.currentPosition - this.selectText.length,this.elementValue);
        newnumberString 
= (frontStr || ""+ "" + (lastStr || "");
        direction 
= 0;
    }
 else {
        
// 如果当前位置是格式符.
        if ( !this.isDotOrNot(this.currentPosition,this.elementValue) ) {
            
this.moveCursor(this.currentPosition  + 11);
            
return;
        }

        frontStr 
= this.elementValue.substr(0this.currentPosition);
        lastStr 
= this.elementValue.substr(this.currentPosition + 1);
        newnumberString 
= (frontStr || ""+ "" + (lastStr || "");
    }


    
this.element.value = this.formatTheNumber(newnumberString);
    
this.moveCursor(newPosition , direction);
}
;
//判断是不是格式符号
NumberMask.prototype.isDotOrNot= function (position,myText){
 
var dot=myText.charAt(position);
 
if(dot=="."){
   
return false;
 }

 
return true;
}
;
// 处理backspace键.
NumberMask.prototype.dealBackSpace = function (e) {
    
    
var frontStr = "";
    
var lastStr = "";
    
var direction = -1;
    e.returnValue 
= false;
    
    
var newnumberString = "";
    
var newPosition = this.currentPosition;
    
    
if ( this.selectText.length > 0 ) {
        
// 如果选中的字符串是以分割符开始,什么也不做.
        if ( !this.isDotOrNot(this.currentPosition - this.selectText.length,this.elementValue) ) {
            
this.moveCursor(this.currentPosition - this.selectText.length , 0);
            
return;
        }

        
var frontStr = this.elementValue.substr(0this.currentPosition - this.selectText.length);
        
var lastStr = this.elementValue.substr(this.currentPosition);
        
this.selectText = this.dealSelectText(this.selectText, this.currentPosition - this.selectText.length,this.elementValue);
        newnumberString 
= (frontStr || ""+ "" + (lastStr || "");
        newPosition 
-= this.selectText.length
        direction 
= 0;
    }
 else {
        
// 如果当前位置是格式符.
        if ( !this.isDotOrNot(this.currentPosition - 1,this.elementValue) ) {
            
this.moveCursor(this.currentPosition - 1-1);
            
return;
        }

        frontStr 
= this.elementValue.substr(0this.currentPosition - 1);
        lastStr 
= this.elementValue.substr(this.currentPosition);
        newnumberString 
= (frontStr || ""+ "" + (lastStr || "");
        newPosition 
--;
    }


    
this.element.value = this.formatTheNumber(newnumberString);
    
this.moveCursor(newPosition , direction);
}
;

// 设置隐藏输入框的值.
NumberMask.prototype.setHiddenValue = function () {
    
if ( this.hiddenElementId == null 
        
|| this.hiddenMaskString == null || this.hiddenMaskString.length == 0 ) {
        
return;
    }

    
    
if ( !this.isValidNumber() ) {
        
this.hiddenElementId.value = "";
        
return;
    }

    
    
var hiddenValue = this.hiddenMaskString;
    
var dot=this.element.value.indexOf(".");
    
if ( this.hiddenintegerIndex >= 0 && this.integerIndex >= 0 ) {
    
        hiddenValue 
= this.replaceString(hiddenValue, "##"this.element.value.substr(this.integerIndex, dot));
    }

    
if ( this.hiddendoubleIndex >= 0 && this.doubleIndex >= 0 ) {
        hiddenValue 
= this.replaceString(hiddenValue, "dd"this.element.value.substr(this.doubleIndex, 2));
    }

    
    
this.hiddenElementId.value = hiddenValue;
}
;

// 不出现鼠标的右键菜单.
NumberMask.prototype.onContextMenu = function (e) {
    e.returnValue 
= false;
}
;

// 当输入框获得焦点时.
NumberMask.prototype.onFocus = function (e) {
    
    
if ( this.autoNull && this.element.value.length <= 0 ) {
        
this.element.value = this.formatTheNumber("");
    }

    
    
var objTextRange = this.element.createTextRange();
    
var foundStart = false;
    
var start = 0;
    
var end = 0;
    
for ( var i = 0; i < this.maskString.length ; i ++ ) {
        
if ( !foundStart && this.canInput(i) ) {
            start 
= i;
            foundStart 
= true;
        }
 else if ( foundStart && !this.canInput(i) ) {
            end 
= i;
            
break;
        }

    }

    objTextRange.moveStart( 
"character", start);
    objTextRange.moveEnd( 
"character",  0 - (this.maskString.length - end));
    objTextRange.collapse();
    objTextRange.select();    
}
;

// 判断当前的值是不是一个合法的时间.
NumberMask.prototype.isValidNumber = function () {
    
return true;
}
;

// 当输入框失焦点时.
NumberMask.prototype.onBlur = function (e) {
    
if ( this.autoNull && !this.isValidNumber() ) {
        
this.element.value = "";
    }

}
;

// 相应鼠标的剪切和粘贴事件.
NumberMask.prototype.onBeforeCut = function (e) {

}
;
NumberMask.prototype.onBeforePaste 
= function (e) {

}
;

// 设置是否空值.
NumberMask.prototype.setNull = function (isNull) {
    
this.autoNull = isNull;
}
;
 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值