Browse Source

checkVal fix for optional masks

Robin Herbots 15 years ago
parent
commit
1b66b78c58
1 changed files with 15 additions and 14 deletions
  1. 15 14
      jquery.inputmask.js

+ 15 - 14
jquery.inputmask.js

@@ -3,7 +3,7 @@ Input Mask plugin for jquery
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 0.2.4e
+Version: 0.2.4f
    
 This plugin is based on the masked input plugin written by Josh Bush (digitalbush.com)
 */
@@ -295,6 +295,15 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
             }
         };
 
+        function SetReTargetPlaceHolder(buffer, pos) {
+            var testPos = determineTestPosition(pos);
+            var test = tests[testPos];
+            if (test != undefined && test.optionality && test.offset > 0) {
+                var testedPosition = pos + test.offset;
+                setBufferElement(buffer, pos, getBufferElement(_buffer, testedPosition));
+            }
+        }
+
         function checkVal(input, buffer, clearInvalid) {
             clearOffsets(0, _buffer.length);
             var inputValue = _val.call(input).replace(new RegExp("(" + _buffer.join('') + ")*$"), "");
@@ -308,10 +317,11 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                             setBufferElement(buffer, pos, inputValue.charAt(i));
                             lastMatch = pos;
                         } else {
-                            setBufferElement(buffer, pos, opts.placeholder);
+                            SetReTargetPlaceHolder(buffer, pos);
                         }
                         break;
                     } else {   //nonmask
+                        SetReTargetPlaceHolder(buffer, pos);
                         lastMatch++;
                     }
                 }
@@ -424,7 +434,7 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                         } else
                             break;
                     } else
-                        SetReTargetPlaceHolder(i);
+                        SetReTargetPlaceHolder(buffer, i);
                 }
                 buffer = buffer.join('').replace(new RegExp("(" + _buffer.join('') + ")*$"), "").split('');
                 if (buffer.length == 0) buffer = _buffer.slice();
@@ -438,24 +448,15 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                         var t = getBufferElement(buffer, i);
                         setBufferElement(buffer, i, c);
                         var j = seekNext(i);
-                        if (!isMask(i + 1)) SetReTargetPlaceHolder(i + 1); //remark nonmask elements
+                        if (!isMask(i + 1)) SetReTargetPlaceHolder(buffer, i + 1); //remark nonmask elements
                         if (j < getMaskLength() && isValid(j, t, buffer))
                             c = t;
                         else break;
                     } else
-                        SetReTargetPlaceHolder(i);
+                        SetReTargetPlaceHolder(buffer, i);
                 }
             };
 
-            function SetReTargetPlaceHolder(pos) {
-                var testPos = determineTestPosition(pos);
-                var test = tests[testPos];
-                if (test != undefined && test.optionality && test.offset > 0) {
-                    var testedPosition = pos + test.offset;
-                    setBufferElement(buffer, pos, getBufferElement(_buffer, testedPosition));
-                }
-            }
-
             function caret(input, begin, end) {
                 if (input.length == 0) return;
                 if (typeof begin == 'number') {