浏览代码

fix in remove/overtype code

Robin Herbots 12 年之前
父节点
当前提交
e21ba15799

+ 1 - 1
build.properties

@@ -7,7 +7,7 @@ distdir = dist
 
 
 build.major = 2
 build.major = 2
 build.minor = 3
 build.minor = 3
-build.revision = 61
+build.revision = 62
 
 
 target = jquery.inputmask.bundle.js
 target = jquery.inputmask.bundle.js
 target.min = jquery.inputmask.bundle.min.js
 target.min = jquery.inputmask.bundle.min.js

+ 1 - 1
component.json

@@ -1,6 +1,6 @@
 {
 {
     "name": "jquery.inputmask",
     "name": "jquery.inputmask",
-    "version": "2.3.61",
+    "version": "2.3.62",
     "main": "./dist/jquery.inputmask.bundle.js",
     "main": "./dist/jquery.inputmask.bundle.js",
     "dependencies": {
     "dependencies": {
         "jquery": ">=1.5"
         "jquery": ">=1.5"

二进制
dist/jQuery.InputMask.2.3.61.nupkg


二进制
dist/jQuery.InputMask.2.3.62.nupkg


+ 77 - 103
dist/jquery.inputmask.bundle.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2013 Robin Herbots
 * Copyright (c) 2010 - 2013 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 2.3.61
+* Version: 2.3.62
 */
 */
 
 
 (function ($) {
 (function ($) {
@@ -1267,9 +1267,9 @@
                     }
                     }
 
 
                     //shift chars to left from start to end and put c at end position if defined
                     //shift chars to left from start to end and put c at end position if defined
-                    function shiftL(start, end, c, nomaskJumps) {
+                    function shiftL(start, end, c, maskJumps) {
                         var buffer = getActiveBuffer();
                         var buffer = getActiveBuffer();
-                        if (nomaskJumps !== false) //jumping over nonmask position
+                        if (maskJumps !== false) //jumping over nonmask position
                             while (!isMask(start) && start - 1 >= 0) start--;
                             while (!isMask(start) && start - 1 >= 0) start--;
                         for (var i = start; i < end && i < getMaskLength() ; i++) {
                         for (var i = start; i < end && i < getMaskLength() ; i++) {
                             if (isMask(i)) {
                             if (isMask(i)) {
@@ -1339,9 +1339,66 @@
                             if (buffer.length == 0) getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice();
                             if (buffer.length == 0) getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice();
                         }
                         }
                         return end - (lengthBefore - buffer.length); //return new start position
                         return end - (lengthBefore - buffer.length); //return new start position
-                    }
+                    };
 
 
-                    ;
+
+                    function HandleRemove(input, k, pos) {
+                        if (opts.numericInput || isRTL) {
+                            switch (k) {
+                                case opts.keyCode.BACKSPACE:
+                                    k = opts.keyCode.DELETE;
+                                    break;
+                                case opts.keyCode.DELETE:
+                                    k = opts.keyCode.BACKSPACE;
+                                    break;
+                            }
+                            if (isRTL) {
+                                var pend = pos.end;
+                                pos.end = pos.begin;
+                                pos.begin = pend;
+                            }
+                        }
+
+                        var isSelection = true;
+                        if (pos.begin == pos.end) {
+                            var posBegin = k == opts.keyCode.BACKSPACE ? pos.begin - 1 : pos.begin;
+                            if (opts.isNumeric && opts.radixPoint != "" && getActiveBuffer()[posBegin] == opts.radixPoint) {
+                                pos.begin = (getActiveBuffer().length - 1 == posBegin) /* radixPoint is latest? delete it */ ? pos.begin : k == opts.keyCode.BACKSPACE ? posBegin : seekNext(posBegin);
+                                pos.end = pos.begin;
+                            }
+                            isSelection = false;
+                            if (k == opts.keyCode.BACKSPACE)
+                                pos.begin--;
+                            else if (k == opts.keyCode.DELETE)
+                                pos.end++;
+                        } else if (pos.end - pos.begin == 1 && !opts.insertMode) {
+                            isSelection = false;
+                            if (k == opts.keyCode.BACKSPACE)
+                                pos.begin--;
+                        }
+
+                        clearBuffer(getActiveBuffer(), pos.begin, pos.end);
+
+                        var ml = getMaskLength();
+                        if (opts.greedy == false) {
+                            shiftL(pos.begin, ml, undefined, !isRTL && (k == opts.keyCode.BACKSPACE && !isSelection));
+                        } else {
+                            var newpos = pos.begin;
+                            for (var i = pos.begin; i < pos.end; i++) { //seeknext to skip placeholders at start in selection
+                                if (isMask(i) || !isSelection)
+                                    newpos = shiftL(pos.begin, ml, undefined, !isRTL && (k == opts.keyCode.BACKSPACE && !isSelection));
+                            }
+                            if (!isSelection) pos.begin = newpos;
+                        }
+                        var firstMaskPos = seekNext(-1);
+                        checkVal(input, false, true, getActiveBuffer());
+                        if (getActiveMaskSet()['lastValidPosition'] < firstMaskPos) {
+                            getActiveMaskSet()["lastValidPosition"] = -1;
+                            getActiveMaskSet()["p"] = firstMaskPos;
+                        } else {
+                            getActiveMaskSet()["p"] = pos.begin;
+                        }
+                    }
 
 
                     function keydownEvent(e) {
                     function keydownEvent(e) {
                         //Safari 5.1.x - modal dialog fires keypress twice workaround
                         //Safari 5.1.x - modal dialog fires keypress twice workaround
@@ -1351,61 +1408,7 @@
                         //backspace, delete, and escape get special treatment
                         //backspace, delete, and escape get special treatment
                         if (k == opts.keyCode.BACKSPACE || k == opts.keyCode.DELETE || (iphone && k == 127) || (e.ctrlKey && k == 88)) { //backspace/delete
                         if (k == opts.keyCode.BACKSPACE || k == opts.keyCode.DELETE || (iphone && k == 127) || (e.ctrlKey && k == 88)) { //backspace/delete
                             e.preventDefault(); //stop default action but allow propagation
                             e.preventDefault(); //stop default action but allow propagation
-
-                            if (opts.numericInput || isRTL) {
-                                switch (k) {
-                                    case opts.keyCode.BACKSPACE:
-                                        k = opts.keyCode.DELETE;
-                                        break;
-                                    case opts.keyCode.DELETE:
-                                        k = opts.keyCode.BACKSPACE;
-                                        break;
-                                }
-                                if (isRTL) {
-                                    var pend = pos.end;
-                                    pos.end = pos.begin;
-                                    pos.begin = pend;
-                                }
-                            }
-
-                            var isSelection = true;
-                            if (pos.begin == pos.end) {
-                                var posBegin = k == opts.keyCode.BACKSPACE ? pos.begin - 1 : pos.begin;
-                                if (opts.isNumeric && opts.radixPoint != "" && getActiveBuffer()[posBegin] == opts.radixPoint) {
-                                    pos.begin = (getActiveBuffer().length - 1 == posBegin) /* radixPoint is latest? delete it */ ? pos.begin : k == opts.keyCode.BACKSPACE ? posBegin : seekNext(posBegin);
-                                    pos.end = pos.begin;
-                                }
-                                isSelection = false;
-                                if (k == opts.keyCode.BACKSPACE)
-                                    pos.begin--;
-                                else if (k == opts.keyCode.DELETE)
-                                    pos.end++;
-                            } else if (pos.end - pos.begin == 1 && !opts.insertMode) {
-                                isSelection = false;
-                                if (k == opts.keyCode.BACKSPACE)
-                                    pos.begin--;
-                            }
-
-                            clearBuffer(getActiveBuffer(), pos.begin, pos.end);
-
-                            var ml = getMaskLength();
-                            if (opts.greedy == false) {
-                                shiftL(pos.begin, ml);
-                            } else {
-                                var newpos = pos.begin;
-                                for (var i = isSelection ? seekNext(pos.begin - 1) : pos.begin; i < pos.end; i++) { //seeknext to skip placeholders at start in selection
-                                    newpos = shiftL(pos.begin, ml, undefined, !isRTL && k == opts.keyCode.DELETE);
-                                }
-                                if (!isSelection) pos.begin = newpos;
-                            }
-                            var firstMaskPos = seekNext(-1);
-                            checkVal(input, false, true, getActiveBuffer());
-                            if (getActiveMaskSet()['lastValidPosition'] < firstMaskPos) {
-                                getActiveMaskSet()["lastValidPosition"] = -1;
-                                getActiveMaskSet()["p"] = firstMaskPos;
-                            } else {
-                                getActiveMaskSet()["p"] = pos.begin;
-                            }
+                            HandleRemove(input, k, pos);
                             determineActiveMasksetIndex();
                             determineActiveMasksetIndex();
                             writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]);
                             writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]);
                             if (input._valueGet() == getActiveBufferTemplate().join(''))
                             if (input._valueGet() == getActiveBufferTemplate().join(''))
@@ -1478,45 +1481,16 @@
                                 var isSlctn = isSelection(pos.begin, pos.end), redetermineLVP = false,
                                 var isSlctn = isSelection(pos.begin, pos.end), redetermineLVP = false,
                                     initialIndex = activeMasksetIndex;
                                     initialIndex = activeMasksetIndex;
                                 if (isSlctn) {
                                 if (isSlctn) {
-                                    if (isRTL) {
-                                        var pend = pos.end;
-                                        pos.end = pos.begin;
-                                        pos.begin = pend;
-                                    }
-                                    $.each(masksets, function (ndx, lmnt) {
-                                        if (typeof (lmnt) == "object") {
-                                            activeMasksetIndex = ndx;
-                                            getActiveMaskSet()["undoBuffer"] = getActiveBuffer().join(''); //init undobuffer for recovery when not valid
-                                            var posend = pos.end < getMaskLength() ? pos.end : getMaskLength();
-                                            if (getActiveMaskSet()["lastValidPosition"] > pos.begin && getActiveMaskSet()["lastValidPosition"] < posend) {
-                                                getActiveMaskSet()["lastValidPosition"] = seekPrevious(pos.begin);
-                                            } else {
-                                                redetermineLVP = true;
-                                            }
-                                            clearBuffer(getActiveBuffer(), pos.begin, posend);
-                                            var ml = getMaskLength();
-                                            if (opts.greedy == false) {
-                                                shiftL(pos.begin, ml);
-                                            } else {
-                                                for (var i = pos.begin; i < posend; i++) {
-                                                    if (isMask(i))
-                                                        shiftL(pos.begin, ml);
-                                                }
+                                    activeMasksetIndex = initialIndex;
+                                    HandleRemove(input, opts.keyCode.DELETE, pos);
+                                    if (!opts.insertMode) { //preserve some space
+                                        $.each(masksets, function (ndx, lmnt) {
+                                            if (typeof (lmnt) == "object") {
+                                                activeMasksetIndex = ndx;
+                                                shiftR(pos.begin, getMaskLength(), getPlaceHolder(pos.begin), true);
+                                                getActiveMaskSet()["lastValidPosition"] = seekNext(getActiveMaskSet()["lastValidPosition"]);
                                             }
                                             }
-                                        }
-                                    });
-                                    if (redetermineLVP === true) {
-                                        activeMasksetIndex = initialIndex;
-                                        checkVal(input, false, true, getActiveBuffer());
-                                        if (!opts.insertMode) { //preserve some space
-                                            $.each(masksets, function (ndx, lmnt) {
-                                                if (typeof (lmnt) == "object") {
-                                                    activeMasksetIndex = ndx;
-                                                    shiftR(pos.begin, getMaskLength(), getPlaceHolder(pos.begin), true);
-                                                    getActiveMaskSet()["lastValidPosition"] = seekNext(getActiveMaskSet()["lastValidPosition"]);
-                                                }
-                                            });
-                                        }
+                                        });
                                     }
                                     }
                                     activeMasksetIndex = initialIndex; //restore index
                                     activeMasksetIndex = initialIndex; //restore index
                                 }
                                 }
@@ -1656,7 +1630,7 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2013 Robin Herbots
 Copyright (c) 2010 - 2013 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 2.3.61
+Version: 2.3.62
 
 
 Optional extensions on the jquery.inputmask base
 Optional extensions on the jquery.inputmask base
 */
 */
@@ -1758,7 +1732,7 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2012 Robin Herbots
 Copyright (c) 2010 - 2012 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 2.3.61
+Version: 2.3.62
 
 
 Optional extensions on the jquery.inputmask base
 Optional extensions on the jquery.inputmask base
 */
 */
@@ -2242,7 +2216,7 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2013 Robin Herbots
 Copyright (c) 2010 - 2013 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 2.3.61
+Version: 2.3.62
 
 
 Optional extensions on the jquery.inputmask base
 Optional extensions on the jquery.inputmask base
 */
 */
@@ -2419,7 +2393,7 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2013 Robin Herbots
 Copyright (c) 2010 - 2013 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 2.3.61
+Version: 2.3.62
 
 
 Regex extensions on the jquery.inputmask base
 Regex extensions on the jquery.inputmask base
 Allows for using regular expressions as a mask
 Allows for using regular expressions as a mask
@@ -2589,7 +2563,7 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2013 Robin Herbots
 Copyright (c) 2010 - 2013 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 2.3.61
+Version: 2.3.62
 
 
 Phone extension.
 Phone extension.
 When using this extension make sure you specify the correct url to get the masks
 When using this extension make sure you specify the correct url to get the masks

文件差异内容过多而无法显示
+ 66 - 67
dist/jquery.inputmask.bundle.min.js


文件差异内容过多而无法显示
+ 45 - 46
dist/min/jquery.inputmask.js


+ 1 - 1
jquery.inputmask.jquery.json

@@ -8,7 +8,7 @@
 		"inputmask",
 		"inputmask",
 		"mask"
 		"mask"
     ],
     ],
-    "version": "2.3.61",
+    "version": "2.3.62",
     "author": {
     "author": {
         "name": "Robin Herbots",
         "name": "Robin Herbots",
         "url": "http://github.com/RobinHerbots/jquery.inputmask"
         "url": "http://github.com/RobinHerbots/jquery.inputmask"

+ 71 - 97
js/jquery.inputmask.js

@@ -1267,9 +1267,9 @@
                     }
                     }
 
 
                     //shift chars to left from start to end and put c at end position if defined
                     //shift chars to left from start to end and put c at end position if defined
-                    function shiftL(start, end, c, nomaskJumps) {
+                    function shiftL(start, end, c, maskJumps) {
                         var buffer = getActiveBuffer();
                         var buffer = getActiveBuffer();
-                        if (nomaskJumps !== false) //jumping over nonmask position
+                        if (maskJumps !== false) //jumping over nonmask position
                             while (!isMask(start) && start - 1 >= 0) start--;
                             while (!isMask(start) && start - 1 >= 0) start--;
                         for (var i = start; i < end && i < getMaskLength() ; i++) {
                         for (var i = start; i < end && i < getMaskLength() ; i++) {
                             if (isMask(i)) {
                             if (isMask(i)) {
@@ -1339,9 +1339,66 @@
                             if (buffer.length == 0) getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice();
                             if (buffer.length == 0) getActiveMaskSet()["buffer"] = getActiveBufferTemplate().slice();
                         }
                         }
                         return end - (lengthBefore - buffer.length); //return new start position
                         return end - (lengthBefore - buffer.length); //return new start position
-                    }
+                    };
 
 
-                    ;
+
+                    function HandleRemove(input, k, pos) {
+                        if (opts.numericInput || isRTL) {
+                            switch (k) {
+                                case opts.keyCode.BACKSPACE:
+                                    k = opts.keyCode.DELETE;
+                                    break;
+                                case opts.keyCode.DELETE:
+                                    k = opts.keyCode.BACKSPACE;
+                                    break;
+                            }
+                            if (isRTL) {
+                                var pend = pos.end;
+                                pos.end = pos.begin;
+                                pos.begin = pend;
+                            }
+                        }
+
+                        var isSelection = true;
+                        if (pos.begin == pos.end) {
+                            var posBegin = k == opts.keyCode.BACKSPACE ? pos.begin - 1 : pos.begin;
+                            if (opts.isNumeric && opts.radixPoint != "" && getActiveBuffer()[posBegin] == opts.radixPoint) {
+                                pos.begin = (getActiveBuffer().length - 1 == posBegin) /* radixPoint is latest? delete it */ ? pos.begin : k == opts.keyCode.BACKSPACE ? posBegin : seekNext(posBegin);
+                                pos.end = pos.begin;
+                            }
+                            isSelection = false;
+                            if (k == opts.keyCode.BACKSPACE)
+                                pos.begin--;
+                            else if (k == opts.keyCode.DELETE)
+                                pos.end++;
+                        } else if (pos.end - pos.begin == 1 && !opts.insertMode) {
+                            isSelection = false;
+                            if (k == opts.keyCode.BACKSPACE)
+                                pos.begin--;
+                        }
+
+                        clearBuffer(getActiveBuffer(), pos.begin, pos.end);
+
+                        var ml = getMaskLength();
+                        if (opts.greedy == false) {
+                            shiftL(pos.begin, ml, undefined, !isRTL && (k == opts.keyCode.BACKSPACE && !isSelection));
+                        } else {
+                            var newpos = pos.begin;
+                            for (var i = pos.begin; i < pos.end; i++) { //seeknext to skip placeholders at start in selection
+                                if (isMask(i) || !isSelection)
+                                    newpos = shiftL(pos.begin, ml, undefined, !isRTL && (k == opts.keyCode.BACKSPACE && !isSelection));
+                            }
+                            if (!isSelection) pos.begin = newpos;
+                        }
+                        var firstMaskPos = seekNext(-1);
+                        checkVal(input, false, true, getActiveBuffer());
+                        if (getActiveMaskSet()['lastValidPosition'] < firstMaskPos) {
+                            getActiveMaskSet()["lastValidPosition"] = -1;
+                            getActiveMaskSet()["p"] = firstMaskPos;
+                        } else {
+                            getActiveMaskSet()["p"] = pos.begin;
+                        }
+                    }
 
 
                     function keydownEvent(e) {
                     function keydownEvent(e) {
                         //Safari 5.1.x - modal dialog fires keypress twice workaround
                         //Safari 5.1.x - modal dialog fires keypress twice workaround
@@ -1351,61 +1408,7 @@
                         //backspace, delete, and escape get special treatment
                         //backspace, delete, and escape get special treatment
                         if (k == opts.keyCode.BACKSPACE || k == opts.keyCode.DELETE || (iphone && k == 127) || (e.ctrlKey && k == 88)) { //backspace/delete
                         if (k == opts.keyCode.BACKSPACE || k == opts.keyCode.DELETE || (iphone && k == 127) || (e.ctrlKey && k == 88)) { //backspace/delete
                             e.preventDefault(); //stop default action but allow propagation
                             e.preventDefault(); //stop default action but allow propagation
-
-                            if (opts.numericInput || isRTL) {
-                                switch (k) {
-                                    case opts.keyCode.BACKSPACE:
-                                        k = opts.keyCode.DELETE;
-                                        break;
-                                    case opts.keyCode.DELETE:
-                                        k = opts.keyCode.BACKSPACE;
-                                        break;
-                                }
-                                if (isRTL) {
-                                    var pend = pos.end;
-                                    pos.end = pos.begin;
-                                    pos.begin = pend;
-                                }
-                            }
-
-                            var isSelection = true;
-                            if (pos.begin == pos.end) {
-                                var posBegin = k == opts.keyCode.BACKSPACE ? pos.begin - 1 : pos.begin;
-                                if (opts.isNumeric && opts.radixPoint != "" && getActiveBuffer()[posBegin] == opts.radixPoint) {
-                                    pos.begin = (getActiveBuffer().length - 1 == posBegin) /* radixPoint is latest? delete it */ ? pos.begin : k == opts.keyCode.BACKSPACE ? posBegin : seekNext(posBegin);
-                                    pos.end = pos.begin;
-                                }
-                                isSelection = false;
-                                if (k == opts.keyCode.BACKSPACE)
-                                    pos.begin--;
-                                else if (k == opts.keyCode.DELETE)
-                                    pos.end++;
-                            } else if (pos.end - pos.begin == 1 && !opts.insertMode) {
-                                isSelection = false;
-                                if (k == opts.keyCode.BACKSPACE)
-                                    pos.begin--;
-                            }
-
-                            clearBuffer(getActiveBuffer(), pos.begin, pos.end);
-
-                            var ml = getMaskLength();
-                            if (opts.greedy == false) {
-                                shiftL(pos.begin, ml);
-                            } else {
-                                var newpos = pos.begin;
-                                for (var i = isSelection ? seekNext(pos.begin - 1) : pos.begin; i < pos.end; i++) { //seeknext to skip placeholders at start in selection
-                                    newpos = shiftL(pos.begin, ml, undefined, !isRTL && k == opts.keyCode.DELETE);
-                                }
-                                if (!isSelection) pos.begin = newpos;
-                            }
-                            var firstMaskPos = seekNext(-1);
-                            checkVal(input, false, true, getActiveBuffer());
-                            if (getActiveMaskSet()['lastValidPosition'] < firstMaskPos) {
-                                getActiveMaskSet()["lastValidPosition"] = -1;
-                                getActiveMaskSet()["p"] = firstMaskPos;
-                            } else {
-                                getActiveMaskSet()["p"] = pos.begin;
-                            }
+                            HandleRemove(input, k, pos);
                             determineActiveMasksetIndex();
                             determineActiveMasksetIndex();
                             writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]);
                             writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]);
                             if (input._valueGet() == getActiveBufferTemplate().join(''))
                             if (input._valueGet() == getActiveBufferTemplate().join(''))
@@ -1478,45 +1481,16 @@
                                 var isSlctn = isSelection(pos.begin, pos.end), redetermineLVP = false,
                                 var isSlctn = isSelection(pos.begin, pos.end), redetermineLVP = false,
                                     initialIndex = activeMasksetIndex;
                                     initialIndex = activeMasksetIndex;
                                 if (isSlctn) {
                                 if (isSlctn) {
-                                    if (isRTL) {
-                                        var pend = pos.end;
-                                        pos.end = pos.begin;
-                                        pos.begin = pend;
-                                    }
-                                    $.each(masksets, function (ndx, lmnt) {
-                                        if (typeof (lmnt) == "object") {
-                                            activeMasksetIndex = ndx;
-                                            getActiveMaskSet()["undoBuffer"] = getActiveBuffer().join(''); //init undobuffer for recovery when not valid
-                                            var posend = pos.end < getMaskLength() ? pos.end : getMaskLength();
-                                            if (getActiveMaskSet()["lastValidPosition"] > pos.begin && getActiveMaskSet()["lastValidPosition"] < posend) {
-                                                getActiveMaskSet()["lastValidPosition"] = seekPrevious(pos.begin);
-                                            } else {
-                                                redetermineLVP = true;
-                                            }
-                                            clearBuffer(getActiveBuffer(), pos.begin, posend);
-                                            var ml = getMaskLength();
-                                            if (opts.greedy == false) {
-                                                shiftL(pos.begin, ml);
-                                            } else {
-                                                for (var i = pos.begin; i < posend; i++) {
-                                                    if (isMask(i))
-                                                        shiftL(pos.begin, ml);
-                                                }
+                                    activeMasksetIndex = initialIndex;
+                                    HandleRemove(input, opts.keyCode.DELETE, pos);
+                                    if (!opts.insertMode) { //preserve some space
+                                        $.each(masksets, function (ndx, lmnt) {
+                                            if (typeof (lmnt) == "object") {
+                                                activeMasksetIndex = ndx;
+                                                shiftR(pos.begin, getMaskLength(), getPlaceHolder(pos.begin), true);
+                                                getActiveMaskSet()["lastValidPosition"] = seekNext(getActiveMaskSet()["lastValidPosition"]);
                                             }
                                             }
-                                        }
-                                    });
-                                    if (redetermineLVP === true) {
-                                        activeMasksetIndex = initialIndex;
-                                        checkVal(input, false, true, getActiveBuffer());
-                                        if (!opts.insertMode) { //preserve some space
-                                            $.each(masksets, function (ndx, lmnt) {
-                                                if (typeof (lmnt) == "object") {
-                                                    activeMasksetIndex = ndx;
-                                                    shiftR(pos.begin, getMaskLength(), getPlaceHolder(pos.begin), true);
-                                                    getActiveMaskSet()["lastValidPosition"] = seekNext(getActiveMaskSet()["lastValidPosition"]);
-                                                }
-                                            });
-                                        }
+                                        });
                                     }
                                     }
                                     activeMasksetIndex = initialIndex; //restore index
                                     activeMasksetIndex = initialIndex; //restore index
                                 }
                                 }