Browse Source

fix backspace issue multi mask

Robin Herbots 12 years ago
parent
commit
cd4811e0e0

+ 1 - 1
build.properties

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

BIN
dist/jQuery.InputMask.2.2.3.nupkg


BIN
dist/jQuery.InputMask.2.2.4.nupkg


+ 12 - 11
dist/jquery.inputmask.bundle.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2013 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 2.2.3
+* Version: 2.2.4
 */
 
 (function ($) {
@@ -807,14 +807,10 @@
                 patchValueProperty(el);
 
                 //init vars
-                var buffer = getActiveBuffer().slice(),
-                undoBuffer = el._valueGet(),
-
+                var undoBuffer = el._valueGet(),
                 skipKeyPressEvent = false, //Safari 5.1.x - modal dialog fires keypress twice workaround
                 ignorable = false,
                 lastPosition = -1,
-                firstMaskPos = seekNext(buffer, -1),
-                lastMaskPos = seekPrevious(buffer, getMaskLength(buffer)),
                 isRTL = false;
                 if (el.dir == "rtl" || opts.numericInput) {
                     if (el.dir == "rtl" || (opts.numericInput && opts.rightAlignNumerics))
@@ -1111,7 +1107,8 @@
 
                     //backspace, delete, and escape get special treatment
                     if (k == opts.keyCode.BACKSPACE || k == opts.keyCode.DELETE || (iphone && k == 127)) {//backspace/delete
-                        var maskL = getMaskLength(buffer);
+                        var maskL = getMaskLength(buffer),
+                            firstMaskPos = seekNext(buffer, -1);
                         if (pos.begin == 0 && pos.end == maskL) { //remove full selection
                             activeMasksetIndex = 0; //reset activemask
                             buffer = getActiveBuffer().slice();
@@ -1157,6 +1154,10 @@
                                     }
                                     determineActiveMasksetIndex(buffer, beginPos, activeMasksetIndex);
                                     writeBuffer(input, buffer, beginPos);
+                                } else if (activeMasksetIndex > 0) { //retry other masks
+                                    beginPos = shiftL(beginPos - 1, maskL);
+                                    activeMasksetIndex = 0; //reset
+                                    writeBuffer(input, getActiveBuffer(), beginPos);
                                 }
                             }
                         }
@@ -1166,7 +1167,7 @@
                         if (opts.showTooltip) { //update tooltip
                             $input.prop("title", getActiveMaskSet()["mask"]);
                         }
-                        
+
                         e.preventDefault(); //stop default action but allow propagation
                     } else if (k == opts.keyCode.END || k == opts.keyCode.PAGE_DOWN) { //when END or PAGE_DOWN pressed set position at lastmatch
                         setTimeout(function () {
@@ -1334,7 +1335,7 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2013 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 2.2.3
+Version: 2.2.4
 
 Optional extensions on the jquery.inputmask base
 */
@@ -1431,7 +1432,7 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2012 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 2.2.3
+Version: 2.2.4
 
 Optional extensions on the jquery.inputmask base
 */
@@ -1924,7 +1925,7 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2013 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 2.2.3
+Version: 2.2.4
 
 Optional extensions on the jquery.inputmask base
 */

File diff suppressed because it is too large
+ 35 - 35
dist/jquery.inputmask.bundle.min.js


File diff suppressed because it is too large
+ 35 - 35
dist/min/jquery.inputmask.js


+ 1 - 1
jquery.inputmask.jquery.json

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

+ 8 - 7
js/jquery.inputmask.js

@@ -807,14 +807,10 @@
                 patchValueProperty(el);
 
                 //init vars
-                var buffer = getActiveBuffer().slice(),
-                undoBuffer = el._valueGet(),
-
+                var undoBuffer = el._valueGet(),
                 skipKeyPressEvent = false, //Safari 5.1.x - modal dialog fires keypress twice workaround
                 ignorable = false,
                 lastPosition = -1,
-                firstMaskPos = seekNext(buffer, -1),
-                lastMaskPos = seekPrevious(buffer, getMaskLength(buffer)),
                 isRTL = false;
                 if (el.dir == "rtl" || opts.numericInput) {
                     if (el.dir == "rtl" || (opts.numericInput && opts.rightAlignNumerics))
@@ -1111,7 +1107,8 @@
 
                     //backspace, delete, and escape get special treatment
                     if (k == opts.keyCode.BACKSPACE || k == opts.keyCode.DELETE || (iphone && k == 127)) {//backspace/delete
-                        var maskL = getMaskLength(buffer);
+                        var maskL = getMaskLength(buffer),
+                            firstMaskPos = seekNext(buffer, -1);
                         if (pos.begin == 0 && pos.end == maskL) { //remove full selection
                             activeMasksetIndex = 0; //reset activemask
                             buffer = getActiveBuffer().slice();
@@ -1157,6 +1154,10 @@
                                     }
                                     determineActiveMasksetIndex(buffer, beginPos, activeMasksetIndex);
                                     writeBuffer(input, buffer, beginPos);
+                                } else if (activeMasksetIndex > 0) { //retry other masks
+                                    beginPos = shiftL(beginPos - 1, maskL);
+                                    activeMasksetIndex = 0; //reset
+                                    writeBuffer(input, getActiveBuffer(), beginPos);
                                 }
                             }
                         }
@@ -1166,7 +1167,7 @@
                         if (opts.showTooltip) { //update tooltip
                             $input.prop("title", getActiveMaskSet()["mask"]);
                         }
-                        
+
                         e.preventDefault(); //stop default action but allow propagation
                     } else if (k == opts.keyCode.END || k == opts.keyCode.PAGE_DOWN) { //when END or PAGE_DOWN pressed set position at lastmatch
                         setTimeout(function () {