ソースを参照

setvalue in phone extensions

Robin Herbots 12 年 前
コミット
d762197e23

+ 1 - 1
build.properties

@@ -7,7 +7,7 @@ distdir = dist
 
 
 build.major = 2
 build.major = 2
 build.minor = 3
 build.minor = 3
-build.revision = 60
+build.revision = 61
 
 
 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.60",
+    "version": "2.3.61",
     "main": "./dist/jquery.inputmask.bundle.js",
     "main": "./dist/jquery.inputmask.bundle.js",
     "dependencies": {
     "dependencies": {
         "jquery": ">=1.5"
         "jquery": ">=1.5"

BIN
dist/jQuery.InputMask.2.3.60.nupkg


BIN
dist/jQuery.InputMask.2.3.61.nupkg


+ 58 - 87
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.60
+* Version: 2.3.61
 */
 */
 
 
 (function ($) {
 (function ($) {
@@ -817,16 +817,11 @@
                     if (writeOut) input._valueSet(""); //initial clear
                     if (writeOut) input._valueSet(""); //initial clear
                     var ml = getMaskLength();
                     var ml = getMaskLength();
                     $.each(inputValue, function (ndx, charCode) {
                     $.each(inputValue, function (ndx, charCode) {
-                        var index = ndx,
-                            lvp = getActiveMaskSet()["lastValidPosition"],
-                            pos = lvp == -1 ? index : seekNext(lvp);
+                        var lvp = getActiveMaskSet()["lastValidPosition"],
+                        pos = lvp == -1 ? ndx : seekNext(lvp);
 
 
-                        if ((strict && isMask(index)) ||
-                            ((charCode != getBufferElement(getActiveBufferTemplate().slice(), index, true) || isMask(index)) &&
-                             $.inArray(charCode, getActiveBufferTemplate().slice(lvp + 1, pos)) == -1)
-                            ) {
-                            $(input).trigger("_keypress", [true, charCode.charCodeAt(0), writeOut, strict, index]);
-                        }
+                        if ($.isArray(opts.mask) || $.inArray(charCode, getActiveBufferTemplate().slice(lvp + 1, pos)) == -1)
+                            $(input).trigger("_keypress", [true, charCode.charCodeAt(0), writeOut, strict, ndx]);
                     });
                     });
 
 
                     if (strict === true && getActiveMaskSet()["p"] != -1) {
                     if (strict === true && getActiveMaskSet()["p"] != -1) {
@@ -1272,9 +1267,10 @@
                     }
                     }
 
 
                     //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) {
+                    function shiftL(start, end, c, nomaskJumps) {
                         var buffer = getActiveBuffer();
                         var buffer = getActiveBuffer();
-                        while (!isMask(start) && start - 1 >= 0) start--; //jumping over nonmask position
+                        if (nomaskJumps !== false) //jumping over nonmask position
+                            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)) {
                                 setReTargetPlaceHolder(buffer, i);
                                 setReTargetPlaceHolder(buffer, i);
@@ -1365,77 +1361,51 @@
                                         k = opts.keyCode.BACKSPACE;
                                         k = opts.keyCode.BACKSPACE;
                                         break;
                                         break;
                                 }
                                 }
-                            }
-
-                            if (isSelection(pos.begin, pos.end)) {
                                 if (isRTL) {
                                 if (isRTL) {
                                     var pend = pos.end;
                                     var pend = pos.end;
                                     pos.end = pos.begin;
                                     pos.end = pos.begin;
                                     pos.begin = pend;
                                     pos.begin = pend;
                                 }
                                 }
-                                clearBuffer(getActiveBuffer(), pos.begin, pos.end);
-                                if (pos.begin == 0 && pos.end == getMaskLength()) {
-                                    $.each(masksets, function (ndx, ms) {
-                                        if (typeof (ms) == "object") {
-                                            ms["buffer"] = ms["_buffer"].slice();
-                                            ms["lastValidPosition"] = -1;
-                                        }
-                                    });
-                                } else { //partial selection
-                                    var ml = getMaskLength();
-                                    if (opts.greedy == false) {
-                                        shiftL(pos.begin, ml);
-                                    } else {
-                                        for (var i = pos.begin; i < pos.end; i++) {
-                                            if (isMask(i))
-                                                shiftL(pos.begin, ml);
-                                        }
-                                    }
-                                    var firstMaskPos = seekNext(-1);
-                                    checkVal(input, false, true, getActiveBuffer());
-                                    if (getActiveMaskSet()['lastValidPosition'] < firstMaskPos) {
-                                        getActiveMaskSet()["lastValidPosition"] = -1;
-                                        getActiveMaskSet()["p"] = firstMaskPos;
-                                    } else {
-                                        getActiveMaskSet()["writeOutBuffer"] = true;
-                                        getActiveMaskSet()["p"] = pos.begin;
-                                    }
+                            }
+
+                            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;
                                 }
                                 }
-                            } else {
-                                $.each(masksets, function (ndx, ms) {
-                                    if (typeof (ms) == "object") {
-                                        activeMasksetIndex = ndx;
-                                        var beginPos = android53x ? pos.end : pos.begin;
-                                        var buffer = getActiveBuffer(), firstMaskPos = seekNext(-1),
-                                            maskL = getMaskLength();
-                                        if (k == opts.keyCode.BACKSPACE) {
-                                            beginPos--;
-                                        }
-                                        if (beginPos < firstMaskPos)
-                                            beginPos = firstMaskPos;
-                                        if (beginPos < maskL) {
-                                            if (opts.isNumeric && opts.radixPoint != "" && buffer[beginPos] == opts.radixPoint) {
-                                                beginPos = (buffer.length - 1 == beginPos) /* radixPoint is latest? delete it */ ? beginPos : seekNext(beginPos);
-                                                beginPos = shiftL(beginPos, maskL);
-                                            } else {
-                                                beginPos = shiftL(beginPos, maskL);
-                                            }
+                                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--;
+                            }
 
 
-                                            if (getActiveMaskSet()['lastValidPosition'] != -1 && getActiveBuffer()[getActiveMaskSet()['lastValidPosition']] == getActiveBufferTemplate()[getActiveMaskSet()['lastValidPosition']])
-                                                getActiveMaskSet()["lastValidPosition"] = getActiveMaskSet()["lastValidPosition"] == 0 ? -1 : seekPrevious(getActiveMaskSet()["lastValidPosition"]);
-                                            if (getActiveMaskSet()['lastValidPosition'] < firstMaskPos) {
-                                                getActiveMaskSet()["lastValidPosition"] = -1;
-                                                getActiveMaskSet()["p"] = firstMaskPos;
-                                            } else {
-                                                getActiveMaskSet()["writeOutBuffer"] = true;
-                                                getActiveMaskSet()["p"] = beginPos;
-                                            }
-                                        }
-                                    }
-                                });
+                            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;
                             }
                             }
-
                             determineActiveMasksetIndex();
                             determineActiveMasksetIndex();
                             writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]);
                             writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]);
                             if (input._valueGet() == getActiveBufferTemplate().join(''))
                             if (input._valueGet() == getActiveBufferTemplate().join(''))
@@ -1471,12 +1441,14 @@
                                 }, 0);
                                 }, 0);
                             }
                             }
                         }
                         }
-                        var currentCaret = caret(input);
-                        opts.onKeyDown.call(this, e, getActiveBuffer(), opts); //extra stuff to execute on keydown
-                        caret(input, currentCaret.begin, currentCaret.end);
+
+                        var currentCaretPos = caret(input);
+                        if (opts.onKeyDown.call(this, e, getActiveBuffer(), opts) === true) //extra stuff to execute on keydown
+                            caret(input, currentCaretPos.begin, currentCaretPos.end);
                         ignorable = $.inArray(k, opts.ignorables) != -1;
                         ignorable = $.inArray(k, opts.ignorables) != -1;
                     }
                     }
 
 
+
                     function keypressEvent(e, checkval, k, writeOut, strict, ndx) {
                     function keypressEvent(e, checkval, k, writeOut, strict, ndx) {
                         //Safari 5.1.x - modal dialog fires keypress twice workaround
                         //Safari 5.1.x - modal dialog fires keypress twice workaround
                         if (k == undefined && skipKeyPressEvent) return false;
                         if (k == undefined && skipKeyPressEvent) return false;
@@ -1595,14 +1567,14 @@
                                             if (minimalForwardPosition == -1 || minimalForwardPosition > seekNext(p)) {
                                             if (minimalForwardPosition == -1 || minimalForwardPosition > seekNext(p)) {
                                                 minimalForwardPosition = seekNext(p);
                                                 minimalForwardPosition = seekNext(p);
                                             }
                                             }
-                                        } else {
+                                        } else if (!strict) {
                                             var nextPos = p < getMaskLength() ? p + 1 : p;
                                             var nextPos = p < getMaskLength() ? p + 1 : p;
                                             if (minimalForwardPosition == -1 || minimalForwardPosition > nextPos) {
                                             if (minimalForwardPosition == -1 || minimalForwardPosition > nextPos) {
                                                 minimalForwardPosition = nextPos;
                                                 minimalForwardPosition = nextPos;
                                             }
                                             }
                                         }
                                         }
-                                        getActiveMaskSet()["p"] = minimalForwardPosition; //needed for checkval strict 
-                                        //console.log(getActiveBuffer().join("") + " " + minimalForwardPosition);
+                                        if (minimalForwardPosition > getActiveMaskSet()["p"])
+                                            getActiveMaskSet()["p"] = minimalForwardPosition; //needed for checkval strict 
                                     }
                                     }
                                 });
                                 });
 
 
@@ -1659,9 +1631,7 @@
 
 
                     function keyupEvent(e) {
                     function keyupEvent(e) {
                         var $input = $(this), input = this, k = e.keyCode, buffer = getActiveBuffer();
                         var $input = $(this), input = this, k = e.keyCode, buffer = getActiveBuffer();
-                        var currentCaret = caret(input);
                         opts.onKeyUp.call(this, e, buffer, opts); //extra stuff to execute on keyup
                         opts.onKeyUp.call(this, e, buffer, opts); //extra stuff to execute on keyup
-                        caret(input, currentCaret.begin, currentCaret.end);
                         if (k == opts.keyCode.TAB && opts.showMaskOnFocus) {
                         if (k == opts.keyCode.TAB && opts.showMaskOnFocus) {
                             if ($input.hasClass('focus.inputmask') && input._valueGet().length == 0) {
                             if ($input.hasClass('focus.inputmask') && input._valueGet().length == 0) {
                                 buffer = getActiveBufferTemplate().slice();
                                 buffer = getActiveBufferTemplate().slice();
@@ -1686,7 +1656,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.60
+Version: 2.3.61
 
 
 Optional extensions on the jquery.inputmask base
 Optional extensions on the jquery.inputmask base
 */
 */
@@ -1788,7 +1758,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.60
+Version: 2.3.61
 
 
 Optional extensions on the jquery.inputmask base
 Optional extensions on the jquery.inputmask base
 */
 */
@@ -2272,7 +2242,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.60
+Version: 2.3.61
 
 
 Optional extensions on the jquery.inputmask base
 Optional extensions on the jquery.inputmask base
 */
 */
@@ -2371,6 +2341,7 @@ Optional extensions on the jquery.inputmask base
                 } else if (e.keyCode == opts.keyCode.DELETE || e.keyCode == opts.keyCode.BACKSPACE) {
                 } else if (e.keyCode == opts.keyCode.DELETE || e.keyCode == opts.keyCode.BACKSPACE) {
                     opts.postFormat(buffer, 0, true, opts);
                     opts.postFormat(buffer, 0, true, opts);
                     input._valueSet(buffer.join(''));
                     input._valueSet(buffer.join(''));
+                    return true;
                 }
                 }
             },
             },
             definitions: {
             definitions: {
@@ -2448,7 +2419,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.60
+Version: 2.3.61
 
 
 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
@@ -2618,7 +2589,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.60
+Version: 2.3.61
 
 
 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

ファイルの差分が大きいため隠しています
+ 69 - 69
dist/jquery.inputmask.bundle.min.js


ファイルの差分が大きいため隠しています
+ 47 - 47
dist/min/jquery.inputmask.js


ファイルの差分が大きいため隠しています
+ 3 - 3
dist/min/jquery.inputmask.numeric.extensions.js


+ 1 - 1
jquery.inputmask.jquery.json

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

+ 52 - 82
js/jquery.inputmask.js

@@ -817,16 +817,11 @@
                     if (writeOut) input._valueSet(""); //initial clear
                     if (writeOut) input._valueSet(""); //initial clear
                     var ml = getMaskLength();
                     var ml = getMaskLength();
                     $.each(inputValue, function (ndx, charCode) {
                     $.each(inputValue, function (ndx, charCode) {
-                        var index = ndx,
-                            lvp = getActiveMaskSet()["lastValidPosition"],
-                            pos = lvp == -1 ? index : seekNext(lvp);
-
-                        if ((strict && isMask(index)) ||
-                            ((charCode != getBufferElement(getActiveBufferTemplate().slice(), index, true) || isMask(index)) &&
-                             $.inArray(charCode, getActiveBufferTemplate().slice(lvp + 1, pos)) == -1)
-                            ) {
-                            $(input).trigger("_keypress", [true, charCode.charCodeAt(0), writeOut, strict, index]);
-                        }
+                        var lvp = getActiveMaskSet()["lastValidPosition"],
+                        pos = lvp == -1 ? ndx : seekNext(lvp);
+
+                        if ($.isArray(opts.mask) || $.inArray(charCode, getActiveBufferTemplate().slice(lvp + 1, pos)) == -1)
+                            $(input).trigger("_keypress", [true, charCode.charCodeAt(0), writeOut, strict, ndx]);
                     });
                     });
 
 
                     if (strict === true && getActiveMaskSet()["p"] != -1) {
                     if (strict === true && getActiveMaskSet()["p"] != -1) {
@@ -1272,9 +1267,10 @@
                     }
                     }
 
 
                     //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) {
+                    function shiftL(start, end, c, nomaskJumps) {
                         var buffer = getActiveBuffer();
                         var buffer = getActiveBuffer();
-                        while (!isMask(start) && start - 1 >= 0) start--; //jumping over nonmask position
+                        if (nomaskJumps !== false) //jumping over nonmask position
+                            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)) {
                                 setReTargetPlaceHolder(buffer, i);
                                 setReTargetPlaceHolder(buffer, i);
@@ -1365,77 +1361,51 @@
                                         k = opts.keyCode.BACKSPACE;
                                         k = opts.keyCode.BACKSPACE;
                                         break;
                                         break;
                                 }
                                 }
-                            }
-
-                            if (isSelection(pos.begin, pos.end)) {
                                 if (isRTL) {
                                 if (isRTL) {
                                     var pend = pos.end;
                                     var pend = pos.end;
                                     pos.end = pos.begin;
                                     pos.end = pos.begin;
                                     pos.begin = pend;
                                     pos.begin = pend;
                                 }
                                 }
-                                clearBuffer(getActiveBuffer(), pos.begin, pos.end);
-                                if (pos.begin == 0 && pos.end == getMaskLength()) {
-                                    $.each(masksets, function (ndx, ms) {
-                                        if (typeof (ms) == "object") {
-                                            ms["buffer"] = ms["_buffer"].slice();
-                                            ms["lastValidPosition"] = -1;
-                                        }
-                                    });
-                                } else { //partial selection
-                                    var ml = getMaskLength();
-                                    if (opts.greedy == false) {
-                                        shiftL(pos.begin, ml);
-                                    } else {
-                                        for (var i = pos.begin; i < pos.end; i++) {
-                                            if (isMask(i))
-                                                shiftL(pos.begin, ml);
-                                        }
-                                    }
-                                    var firstMaskPos = seekNext(-1);
-                                    checkVal(input, false, true, getActiveBuffer());
-                                    if (getActiveMaskSet()['lastValidPosition'] < firstMaskPos) {
-                                        getActiveMaskSet()["lastValidPosition"] = -1;
-                                        getActiveMaskSet()["p"] = firstMaskPos;
-                                    } else {
-                                        getActiveMaskSet()["writeOutBuffer"] = true;
-                                        getActiveMaskSet()["p"] = pos.begin;
-                                    }
+                            }
+
+                            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;
                                 }
                                 }
-                            } else {
-                                $.each(masksets, function (ndx, ms) {
-                                    if (typeof (ms) == "object") {
-                                        activeMasksetIndex = ndx;
-                                        var beginPos = android53x ? pos.end : pos.begin;
-                                        var buffer = getActiveBuffer(), firstMaskPos = seekNext(-1),
-                                            maskL = getMaskLength();
-                                        if (k == opts.keyCode.BACKSPACE) {
-                                            beginPos--;
-                                        }
-                                        if (beginPos < firstMaskPos)
-                                            beginPos = firstMaskPos;
-                                        if (beginPos < maskL) {
-                                            if (opts.isNumeric && opts.radixPoint != "" && buffer[beginPos] == opts.radixPoint) {
-                                                beginPos = (buffer.length - 1 == beginPos) /* radixPoint is latest? delete it */ ? beginPos : seekNext(beginPos);
-                                                beginPos = shiftL(beginPos, maskL);
-                                            } else {
-                                                beginPos = shiftL(beginPos, maskL);
-                                            }
+                                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--;
+                            }
 
 
-                                            if (getActiveMaskSet()['lastValidPosition'] != -1 && getActiveBuffer()[getActiveMaskSet()['lastValidPosition']] == getActiveBufferTemplate()[getActiveMaskSet()['lastValidPosition']])
-                                                getActiveMaskSet()["lastValidPosition"] = getActiveMaskSet()["lastValidPosition"] == 0 ? -1 : seekPrevious(getActiveMaskSet()["lastValidPosition"]);
-                                            if (getActiveMaskSet()['lastValidPosition'] < firstMaskPos) {
-                                                getActiveMaskSet()["lastValidPosition"] = -1;
-                                                getActiveMaskSet()["p"] = firstMaskPos;
-                                            } else {
-                                                getActiveMaskSet()["writeOutBuffer"] = true;
-                                                getActiveMaskSet()["p"] = beginPos;
-                                            }
-                                        }
-                                    }
-                                });
+                            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;
                             }
                             }
-
                             determineActiveMasksetIndex();
                             determineActiveMasksetIndex();
                             writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]);
                             writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]);
                             if (input._valueGet() == getActiveBufferTemplate().join(''))
                             if (input._valueGet() == getActiveBufferTemplate().join(''))
@@ -1471,12 +1441,14 @@
                                 }, 0);
                                 }, 0);
                             }
                             }
                         }
                         }
-                        var currentCaret = caret(input);
-                        opts.onKeyDown.call(this, e, getActiveBuffer(), opts); //extra stuff to execute on keydown
-                        caret(input, currentCaret.begin, currentCaret.end);
+
+                        var currentCaretPos = caret(input);
+                        if (opts.onKeyDown.call(this, e, getActiveBuffer(), opts) === true) //extra stuff to execute on keydown
+                            caret(input, currentCaretPos.begin, currentCaretPos.end);
                         ignorable = $.inArray(k, opts.ignorables) != -1;
                         ignorable = $.inArray(k, opts.ignorables) != -1;
                     }
                     }
 
 
+
                     function keypressEvent(e, checkval, k, writeOut, strict, ndx) {
                     function keypressEvent(e, checkval, k, writeOut, strict, ndx) {
                         //Safari 5.1.x - modal dialog fires keypress twice workaround
                         //Safari 5.1.x - modal dialog fires keypress twice workaround
                         if (k == undefined && skipKeyPressEvent) return false;
                         if (k == undefined && skipKeyPressEvent) return false;
@@ -1595,14 +1567,14 @@
                                             if (minimalForwardPosition == -1 || minimalForwardPosition > seekNext(p)) {
                                             if (minimalForwardPosition == -1 || minimalForwardPosition > seekNext(p)) {
                                                 minimalForwardPosition = seekNext(p);
                                                 minimalForwardPosition = seekNext(p);
                                             }
                                             }
-                                        } else {
+                                        } else if (!strict) {
                                             var nextPos = p < getMaskLength() ? p + 1 : p;
                                             var nextPos = p < getMaskLength() ? p + 1 : p;
                                             if (minimalForwardPosition == -1 || minimalForwardPosition > nextPos) {
                                             if (minimalForwardPosition == -1 || minimalForwardPosition > nextPos) {
                                                 minimalForwardPosition = nextPos;
                                                 minimalForwardPosition = nextPos;
                                             }
                                             }
                                         }
                                         }
-                                        getActiveMaskSet()["p"] = minimalForwardPosition; //needed for checkval strict 
-                                        //console.log(getActiveBuffer().join("") + " " + minimalForwardPosition);
+                                        if (minimalForwardPosition > getActiveMaskSet()["p"])
+                                            getActiveMaskSet()["p"] = minimalForwardPosition; //needed for checkval strict 
                                     }
                                     }
                                 });
                                 });
 
 
@@ -1659,9 +1631,7 @@
 
 
                     function keyupEvent(e) {
                     function keyupEvent(e) {
                         var $input = $(this), input = this, k = e.keyCode, buffer = getActiveBuffer();
                         var $input = $(this), input = this, k = e.keyCode, buffer = getActiveBuffer();
-                        var currentCaret = caret(input);
                         opts.onKeyUp.call(this, e, buffer, opts); //extra stuff to execute on keyup
                         opts.onKeyUp.call(this, e, buffer, opts); //extra stuff to execute on keyup
-                        caret(input, currentCaret.begin, currentCaret.end);
                         if (k == opts.keyCode.TAB && opts.showMaskOnFocus) {
                         if (k == opts.keyCode.TAB && opts.showMaskOnFocus) {
                             if ($input.hasClass('focus.inputmask') && input._valueGet().length == 0) {
                             if ($input.hasClass('focus.inputmask') && input._valueGet().length == 0) {
                                 buffer = getActiveBufferTemplate().slice();
                                 buffer = getActiveBufferTemplate().slice();

+ 1 - 0
js/jquery.inputmask.numeric.extensions.js

@@ -102,6 +102,7 @@ Optional extensions on the jquery.inputmask base
                 } else if (e.keyCode == opts.keyCode.DELETE || e.keyCode == opts.keyCode.BACKSPACE) {
                 } else if (e.keyCode == opts.keyCode.DELETE || e.keyCode == opts.keyCode.BACKSPACE) {
                     opts.postFormat(buffer, 0, true, opts);
                     opts.postFormat(buffer, 0, true, opts);
                     input._valueSet(buffer.join(''));
                     input._valueSet(buffer.join(''));
+                    return true;
                 }
                 }
             },
             },
             definitions: {
             definitions: {

+ 23 - 0
qunit/tests.js

@@ -1507,6 +1507,29 @@ test("inputmask('Regex', { regex: \"(abc)+(def)\" }); - Flyarbonkers regex abcab
     $("#testmask").remove();
     $("#testmask").remove();
 });
 });
 
 
+module("Phone masks")
+asyncTest("inputmask(\"phone\") - value=\"+32(473)890-428\"", 1, function () {
+    $('body').append('<input type="text" id="testmask" value="+32(473)890-428" />');
+    $("#testmask").inputmask("phone", { "url": "../js/phone-codes/phone-codes.json" });
+
+    setTimeout(function () {
+        equal($("#testmask").val(), "+32(473)890-428", "Result " + $("#testmask").val());
+        start();
+        $("#testmask").remove();
+    }, 0);
+});
+
+asyncTest("inputmask(\"phone\") - value=\"32473890428\"", 1, function () {
+    $('body').append('<input type="text" id="testmask" value="32473890428" />');
+    $("#testmask").inputmask("phone", { "url": "../js/phone-codes/phone-codes.json" });
+
+    setTimeout(function () {
+        equal($("#testmask").val(), "+32(473)890-428", "Result " + $("#testmask").val());
+        start();
+        $("#testmask").remove();
+    }, 0);
+});
+
 module("Dynamic Masks");
 module("Dynamic Masks");
 test("inputmask(\"*{1,20}@*{1,20}.*{2,6}[.*{2}]\" - email mask", function () {
 test("inputmask(\"*{1,20}@*{1,20}.*{2,6}[.*{2}]\" - email mask", function () {
     $('body').append('<input type="text" id="testmask" />');
     $('body').append('<input type="text" id="testmask" />');