浏览代码

minor fixes for optional masks

Robin Herbots 15 年之前
父节点
当前提交
b12021ab67
共有 1 个文件被更改,包括 12 次插入13 次删除
  1. 12 13
      jquery.inputmask.js

+ 12 - 13
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.6c
+Version: 0.2.6d
    
 This plugin is based on the masked input plugin written by Josh Bush (digitalbush.com)
 */
@@ -326,21 +326,23 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
             var test = tests[testPos];
             if (test != undefined) {
                 if (test.optionality && test.offset > 0) {
-                    var firstMaskPosition = isFirstMaskOfBlock(testPos); //FIXME should be testPos + test.offset
+                    var firstMaskPosition = isFirstMaskOfBlock(testPos + test.offset);
                     if (firstMaskPosition !== false && _numberOfRemovedElementsFromMask >= test.offset) {  //needs fixing does not take multiple optional masks into account
                         if (clearOptionalElement)
-                            setBufferElement(buffer, pos, getBufferElement(_buffer, testPos));
-                        for(var i = firstMaskPosition; i < testPos;i++) { //reset placeholders
-                        	setBufferElement(buffer, i, getBufferElement(_buffer, i));
+                            setBufferElement(buffer, pos, getBufferElement(_buffer, testPos + test.offset));
+                        for (var i = firstMaskPosition - test.offset; i < testPos; i++) { //reset placeholders
+                            setBufferElement(buffer, i, getBufferElement(_buffer, i));
                         }
                         $.each(_buffer.slice(testPos, testPos + test.offset), function() {
                             buffer.splice(pos++, 0, this.toString());
                         });
                         _numberOfRemovedElementsFromMask -= test.offset;
+                        clearOffsets(firstMaskPosition - test.offset, firstMaskPosition);
+
                     }
                     else {
-                        var testedPosition = pos + test.offset;
-                        setBufferElement(buffer, pos, getBufferElement(_buffer, determineTestPosition(testedPosition)));
+                        var testedPosition = testPos + test.offset;
+                        setBufferElement(buffer, pos, getBufferElement(_buffer, testedPosition));
                         if (testedPosition < buffer.length) {
                             //remove RetargetPosition
                             buffer.splice(pos, test.offset);
@@ -495,9 +497,6 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                 for (var i = pos; i < getMaskLength(); i++) {
                     if (isMask(i)) {
                         SetReTargetPlaceHolder(buffer, i, true); //clear the position
-                        var firstMaskOfBlock = isFirstMaskOfBlock(determineTestPosition(i));
-                        if (firstMaskOfBlock !== false)
-                            clearOffsets(firstMaskOfBlock, firstMaskOfBlock + tests[firstMaskOfBlock].offset);
 
                         var j = seekNext(buffer, i);
                         var p = getBufferElement(buffer, j);
@@ -505,9 +504,9 @@ This plugin is based on the masked input plugin written by Josh Bush (digitalbus
                             if (j < getMaskLength() && isValid(i, p, buffer) !== false) {
                                 setBufferElement(buffer, i, getBufferElement(buffer, j));
                             } else {
-                                if (firstMaskOfBlock !== false) {
-                                    clearOffsets(firstMaskOfBlock, firstMaskOfBlock + tests[firstMaskOfBlock].offset, buffer);
-                                }
+                                //var firstMaskOfBlock = isFirstMaskOfBlock(determineTestPosition(i));
+                                //if (firstMaskOfBlock !== false)
+                                //clearOffsets(firstMaskOfBlock, firstMaskOfBlock + tests[firstMaskOfBlock].offset, buffer);
                                 if (isMask(i))
                                     break;
                             }