ソースを参照

fix postprocessonblur

Robin Herbots 11 年 前
コミット
a98f46d283

+ 24 - 20
dist/inputmask/jquery.inputmask.js

@@ -384,9 +384,9 @@
             return void 0 == getMaskSet().buffer && (getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0)), 
             return void 0 == getMaskSet().buffer && (getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0)), 
             getMaskSet().buffer;
             getMaskSet().buffer;
         }
         }
-        function refreshFromBuffer(start, end) {
-            var buffer = getBuffer().slice();
-            if (start === !0) resetMaskSet(), start = 0, end = buffer.length; else for (var i = start; end > i; i++) delete getMaskSet().validPositions[i], 
+        function refreshFromBuffer(start, end, buffer) {
+            if (buffer = buffer || getBuffer().slice(), start === !0) resetMaskSet(), start = 0, 
+            end = buffer.length; else for (var i = start; end > i; i++) delete getMaskSet().validPositions[i], 
             delete getMaskSet().tests[i];
             delete getMaskSet().tests[i];
             for (var i = start; end > i; i++) buffer[i] != opts.skipOptionalPartCharacter && isValid(i, buffer[i], !0, !0);
             for (var i = start; end > i; i++) buffer[i] != opts.skipOptionalPartCharacter && isValid(i, buffer[i], !0, !0);
         }
         }
@@ -645,9 +645,9 @@
         function patchValueProperty(npt) {
         function patchValueProperty(npt) {
             function PatchValhook(type) {
             function PatchValhook(type) {
                 if (void 0 == $.valHooks[type] || 1 != $.valHooks[type].inputmaskpatch) {
                 if (void 0 == $.valHooks[type] || 1 != $.valHooks[type].inputmaskpatch) {
-                    var valueGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {
+                    var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {
                         return elem.value;
                         return elem.value;
-                    }, valueSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {
+                    }, valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {
                         return elem.value = value, elem;
                         return elem.value = value, elem;
                     };
                     };
                     $.valHooks[type] = {
                     $.valHooks[type] = {
@@ -655,15 +655,16 @@
                             var $elem = $(elem);
                             var $elem = $(elem);
                             if ($elem.data("_inputmask")) {
                             if ($elem.data("_inputmask")) {
                                 if ($elem.data("_inputmask").opts.autoUnmask) return $elem.inputmask("unmaskedvalue");
                                 if ($elem.data("_inputmask").opts.autoUnmask) return $elem.inputmask("unmaskedvalue");
-                                var result = valueGet(elem), inputData = $elem.data("_inputmask"), maskset = inputData.maskset, bufferTemplate = maskset._buffer;
+                                var result = valhookGet(elem), inputData = $elem.data("_inputmask"), maskset = inputData.maskset, bufferTemplate = maskset._buffer;
                                 return bufferTemplate = bufferTemplate ? bufferTemplate.join("") : "", result != bufferTemplate ? result : "";
                                 return bufferTemplate = bufferTemplate ? bufferTemplate.join("") : "", result != bufferTemplate ? result : "";
                             }
                             }
-                            return valueGet(elem);
+                            return valhookGet(elem);
                         },
                         },
                         set: function(elem, value) {
                         set: function(elem, value) {
                             var result, $elem = $(elem), inputData = $elem.data("_inputmask");
                             var result, $elem = $(elem), inputData = $elem.data("_inputmask");
-                            return inputData ? (result = valueSet(elem, $.isFunction(inputData.opts.onBeforeMask) ? inputData.opts.onBeforeMask.call(el, value, inputData.opts) || value : value), 
-                            $elem.triggerHandler("setvalue.inputmask")) : result = valueSet(elem, value), result;
+                            return inputData ? (result = valhookSet(elem, $.isFunction(inputData.opts.onBeforeMask) ? inputData.opts.onBeforeMask.call(el, value, inputData.opts) || value : value), 
+                            $elem.triggerHandler("setvalue.inputmask")) : result = valhookSet(elem, value), 
+                            result;
                         },
                         },
                         inputmaskpatch: !0
                         inputmaskpatch: !0
                     };
                     };
@@ -735,8 +736,8 @@
         function handleOnKeyResult(input, keyResult, caretPos) {
         function handleOnKeyResult(input, keyResult, caretPos) {
             if (keyResult && keyResult.refreshFromBuffer) {
             if (keyResult && keyResult.refreshFromBuffer) {
                 var refresh = keyResult.refreshFromBuffer;
                 var refresh = keyResult.refreshFromBuffer;
-                refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end), resetMaskSet(!0), 
-                void 0 != caretPos && (writeBuffer(input, getBuffer()), caret(input, keyResult.caret || caretPos.begin, keyResult.caret || caretPos.end));
+                refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, keyResult.buffer), 
+                resetMaskSet(!0), void 0 != caretPos && (writeBuffer(input, getBuffer()), caret(input, keyResult.caret || caretPos.begin, keyResult.caret || caretPos.end));
             }
             }
         }
         }
         function keydownEvent(e) {
         function keydownEvent(e) {
@@ -805,10 +806,8 @@
             }
             }
         }
         }
         function keyupEvent(e) {
         function keyupEvent(e) {
-            var $input = $(this), input = this, k = e.keyCode, buffer = getBuffer(), currentCaretPos = caret(input), keyupResult = opts.onKeyUp.call(this, e, buffer, currentCaretPos.begin, opts);
-            handleOnKeyResult(input, keyupResult, currentCaretPos), k == $.inputmask.keyCode.TAB && opts.showMaskOnFocus && ($input.is(":focus") && 0 == input._valueGet().length ? (resetMaskSet(), 
-            buffer = getBuffer(), writeBuffer(input, buffer), caret(input, 0), valueOnFocus = getBuffer().join("")) : (writeBuffer(input, buffer), 
-            caret(input, TranslatePosition(0), TranslatePosition(getMaskLength()))));
+            var input = ($(this), this), buffer = (e.keyCode, getBuffer()), currentCaretPos = caret(input), keyupResult = opts.onKeyUp.call(this, e, buffer, currentCaretPos.begin, opts);
+            handleOnKeyResult(input, keyupResult, currentCaretPos);
         }
         }
         function pasteEvent(e) {
         function pasteEvent(e) {
             if (skipInputEvent === !0 && "input" == e.type) return skipInputEvent = !1, !0;
             if (skipInputEvent === !0 && "input" == e.type) return skipInputEvent = !1, !0;
@@ -873,11 +872,16 @@
                     var $input = $(this), input = this;
                     var $input = $(this), input = this;
                     if ($input.data("_inputmask")) {
                     if ($input.data("_inputmask")) {
                         var nptValue = input._valueGet(), buffer = getBuffer().slice();
                         var nptValue = input._valueGet(), buffer = getBuffer().slice();
-                        firstClick = !0, valueOnFocus != buffer.join("") && ($input.change(), valueOnFocus = buffer.join("")), 
-                        "" != nptValue && (opts.clearMaskOnLostFocus && (nptValue == getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)), 
-                        isComplete(buffer) === !1 && ($input.trigger("incomplete"), opts.clearIncomplete && (resetMaskSet(), 
-                        buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())), $.isFunction(opts.postProcessOnBlur) && opts.postProcessOnBlur.call(input, buffer, opts), 
-                        writeBuffer(input, buffer));
+                        if (firstClick = !0, valueOnFocus != buffer.join("") && ($input.change(), valueOnFocus = buffer.join("")), 
+                        "" != nptValue) {
+                            if (opts.clearMaskOnLostFocus && (nptValue == getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)), 
+                            isComplete(buffer) === !1 && ($input.trigger("incomplete"), opts.clearIncomplete && (resetMaskSet(), 
+                            buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())), $.isFunction(opts.postProcessOnBlur)) {
+                                var keyResult = opts.postProcessOnBlur.call(input, buffer, opts);
+                                keyResult && (handleOnKeyResult(input, keyResult), buffer = getBuffer());
+                            }
+                            writeBuffer(input, buffer);
+                        }
                     }
                     }
                 }).bind("focus.inputmask", function() {
                 }).bind("focus.inputmask", function() {
                     var input = ($(this), this), nptValue = input._valueGet();
                     var input = ($(this), this), nptValue = input._valueGet();

+ 7 - 1
dist/inputmask/jquery.inputmask.numeric.extensions.js

@@ -88,7 +88,13 @@
                 var tmpBufSplit = "" != opts.radixPoint ? tmpBuffer.join("").split(opts.radixPoint) : [ tmpBuffer.join("") ], matchRslt = tmpBufSplit[0].match(opts.regex.integerPart(opts)), matchRsltDigits = 2 == tmpBufSplit.length ? tmpBufSplit[1].match(opts.regex.integerNPart(opts)) : void 0;
                 var tmpBufSplit = "" != opts.radixPoint ? tmpBuffer.join("").split(opts.radixPoint) : [ tmpBuffer.join("") ], matchRslt = tmpBufSplit[0].match(opts.regex.integerPart(opts)), matchRsltDigits = 2 == tmpBufSplit.length ? tmpBufSplit[1].match(opts.regex.integerNPart(opts)) : void 0;
                 matchRslt && "-0" == matchRslt[matchRslt.index] && (void 0 == matchRsltDigits || matchRsltDigits[matchRsltDigits.index].match(/^0+$/)) && tmpBuffer.splice(0, 1);
                 matchRslt && "-0" == matchRslt[matchRslt.index] && (void 0 == matchRsltDigits || matchRsltDigits[matchRsltDigits.index].match(/^0+$/)) && tmpBuffer.splice(0, 1);
                 var radixPosition = $.inArray(opts.radixPoint, tmpBuffer);
                 var radixPosition = $.inArray(opts.radixPoint, tmpBuffer);
-                if (-1 != radixPosition && isFinite(opts.digits) && !opts.digitsOptional) for (var i = 1; i <= opts.digits; i++) (void 0 == tmpBuffer[radixPosition + i] || tmpBuffer[radixPosition + i] == opts.placeholder.charAt(0)) && (tmpBuffer[radixPosition + i] = "0");
+                if (-1 != radixPosition && isFinite(opts.digits) && !opts.digitsOptional) {
+                    for (var i = 1; i <= opts.digits; i++) (void 0 == tmpBuffer[radixPosition + i] || tmpBuffer[radixPosition + i] == opts.placeholder.charAt(0)) && (tmpBuffer[radixPosition + i] = "0");
+                    return {
+                        refreshFromBuffer: !0,
+                        buffer: tmpBuffer
+                    };
+                }
             },
             },
             regex: {
             regex: {
                 integerPart: function() {
                 integerPart: function() {

+ 31 - 21
dist/jquery.inputmask.bundle.js

@@ -382,9 +382,9 @@
             return void 0 == getMaskSet().buffer && (getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0)), 
             return void 0 == getMaskSet().buffer && (getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0)), 
             getMaskSet().buffer;
             getMaskSet().buffer;
         }
         }
-        function refreshFromBuffer(start, end) {
-            var buffer = getBuffer().slice();
-            if (start === !0) resetMaskSet(), start = 0, end = buffer.length; else for (var i = start; end > i; i++) delete getMaskSet().validPositions[i], 
+        function refreshFromBuffer(start, end, buffer) {
+            if (buffer = buffer || getBuffer().slice(), start === !0) resetMaskSet(), start = 0, 
+            end = buffer.length; else for (var i = start; end > i; i++) delete getMaskSet().validPositions[i], 
             delete getMaskSet().tests[i];
             delete getMaskSet().tests[i];
             for (var i = start; end > i; i++) buffer[i] != opts.skipOptionalPartCharacter && isValid(i, buffer[i], !0, !0);
             for (var i = start; end > i; i++) buffer[i] != opts.skipOptionalPartCharacter && isValid(i, buffer[i], !0, !0);
         }
         }
@@ -643,9 +643,9 @@
         function patchValueProperty(npt) {
         function patchValueProperty(npt) {
             function PatchValhook(type) {
             function PatchValhook(type) {
                 if (void 0 == $.valHooks[type] || 1 != $.valHooks[type].inputmaskpatch) {
                 if (void 0 == $.valHooks[type] || 1 != $.valHooks[type].inputmaskpatch) {
-                    var valueGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {
+                    var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {
                         return elem.value;
                         return elem.value;
-                    }, valueSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {
+                    }, valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {
                         return elem.value = value, elem;
                         return elem.value = value, elem;
                     };
                     };
                     $.valHooks[type] = {
                     $.valHooks[type] = {
@@ -653,15 +653,16 @@
                             var $elem = $(elem);
                             var $elem = $(elem);
                             if ($elem.data("_inputmask")) {
                             if ($elem.data("_inputmask")) {
                                 if ($elem.data("_inputmask").opts.autoUnmask) return $elem.inputmask("unmaskedvalue");
                                 if ($elem.data("_inputmask").opts.autoUnmask) return $elem.inputmask("unmaskedvalue");
-                                var result = valueGet(elem), inputData = $elem.data("_inputmask"), maskset = inputData.maskset, bufferTemplate = maskset._buffer;
+                                var result = valhookGet(elem), inputData = $elem.data("_inputmask"), maskset = inputData.maskset, bufferTemplate = maskset._buffer;
                                 return bufferTemplate = bufferTemplate ? bufferTemplate.join("") : "", result != bufferTemplate ? result : "";
                                 return bufferTemplate = bufferTemplate ? bufferTemplate.join("") : "", result != bufferTemplate ? result : "";
                             }
                             }
-                            return valueGet(elem);
+                            return valhookGet(elem);
                         },
                         },
                         set: function(elem, value) {
                         set: function(elem, value) {
                             var result, $elem = $(elem), inputData = $elem.data("_inputmask");
                             var result, $elem = $(elem), inputData = $elem.data("_inputmask");
-                            return inputData ? (result = valueSet(elem, $.isFunction(inputData.opts.onBeforeMask) ? inputData.opts.onBeforeMask.call(el, value, inputData.opts) || value : value), 
-                            $elem.triggerHandler("setvalue.inputmask")) : result = valueSet(elem, value), result;
+                            return inputData ? (result = valhookSet(elem, $.isFunction(inputData.opts.onBeforeMask) ? inputData.opts.onBeforeMask.call(el, value, inputData.opts) || value : value), 
+                            $elem.triggerHandler("setvalue.inputmask")) : result = valhookSet(elem, value), 
+                            result;
                         },
                         },
                         inputmaskpatch: !0
                         inputmaskpatch: !0
                     };
                     };
@@ -733,8 +734,8 @@
         function handleOnKeyResult(input, keyResult, caretPos) {
         function handleOnKeyResult(input, keyResult, caretPos) {
             if (keyResult && keyResult.refreshFromBuffer) {
             if (keyResult && keyResult.refreshFromBuffer) {
                 var refresh = keyResult.refreshFromBuffer;
                 var refresh = keyResult.refreshFromBuffer;
-                refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end), resetMaskSet(!0), 
-                void 0 != caretPos && (writeBuffer(input, getBuffer()), caret(input, keyResult.caret || caretPos.begin, keyResult.caret || caretPos.end));
+                refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, keyResult.buffer), 
+                resetMaskSet(!0), void 0 != caretPos && (writeBuffer(input, getBuffer()), caret(input, keyResult.caret || caretPos.begin, keyResult.caret || caretPos.end));
             }
             }
         }
         }
         function keydownEvent(e) {
         function keydownEvent(e) {
@@ -803,10 +804,8 @@
             }
             }
         }
         }
         function keyupEvent(e) {
         function keyupEvent(e) {
-            var $input = $(this), input = this, k = e.keyCode, buffer = getBuffer(), currentCaretPos = caret(input), keyupResult = opts.onKeyUp.call(this, e, buffer, currentCaretPos.begin, opts);
-            handleOnKeyResult(input, keyupResult, currentCaretPos), k == $.inputmask.keyCode.TAB && opts.showMaskOnFocus && ($input.is(":focus") && 0 == input._valueGet().length ? (resetMaskSet(), 
-            buffer = getBuffer(), writeBuffer(input, buffer), caret(input, 0), valueOnFocus = getBuffer().join("")) : (writeBuffer(input, buffer), 
-            caret(input, TranslatePosition(0), TranslatePosition(getMaskLength()))));
+            var input = ($(this), this), buffer = (e.keyCode, getBuffer()), currentCaretPos = caret(input), keyupResult = opts.onKeyUp.call(this, e, buffer, currentCaretPos.begin, opts);
+            handleOnKeyResult(input, keyupResult, currentCaretPos);
         }
         }
         function pasteEvent(e) {
         function pasteEvent(e) {
             if (skipInputEvent === !0 && "input" == e.type) return skipInputEvent = !1, !0;
             if (skipInputEvent === !0 && "input" == e.type) return skipInputEvent = !1, !0;
@@ -871,11 +870,16 @@
                     var $input = $(this), input = this;
                     var $input = $(this), input = this;
                     if ($input.data("_inputmask")) {
                     if ($input.data("_inputmask")) {
                         var nptValue = input._valueGet(), buffer = getBuffer().slice();
                         var nptValue = input._valueGet(), buffer = getBuffer().slice();
-                        firstClick = !0, valueOnFocus != buffer.join("") && ($input.change(), valueOnFocus = buffer.join("")), 
-                        "" != nptValue && (opts.clearMaskOnLostFocus && (nptValue == getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)), 
-                        isComplete(buffer) === !1 && ($input.trigger("incomplete"), opts.clearIncomplete && (resetMaskSet(), 
-                        buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())), $.isFunction(opts.postProcessOnBlur) && opts.postProcessOnBlur.call(input, buffer, opts), 
-                        writeBuffer(input, buffer));
+                        if (firstClick = !0, valueOnFocus != buffer.join("") && ($input.change(), valueOnFocus = buffer.join("")), 
+                        "" != nptValue) {
+                            if (opts.clearMaskOnLostFocus && (nptValue == getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)), 
+                            isComplete(buffer) === !1 && ($input.trigger("incomplete"), opts.clearIncomplete && (resetMaskSet(), 
+                            buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())), $.isFunction(opts.postProcessOnBlur)) {
+                                var keyResult = opts.postProcessOnBlur.call(input, buffer, opts);
+                                keyResult && (handleOnKeyResult(input, keyResult), buffer = getBuffer());
+                            }
+                            writeBuffer(input, buffer);
+                        }
                     }
                     }
                 }).bind("focus.inputmask", function() {
                 }).bind("focus.inputmask", function() {
                     var input = ($(this), this), nptValue = input._valueGet();
                     var input = ($(this), this), nptValue = input._valueGet();
@@ -1850,7 +1854,13 @@
                 var tmpBufSplit = "" != opts.radixPoint ? tmpBuffer.join("").split(opts.radixPoint) : [ tmpBuffer.join("") ], matchRslt = tmpBufSplit[0].match(opts.regex.integerPart(opts)), matchRsltDigits = 2 == tmpBufSplit.length ? tmpBufSplit[1].match(opts.regex.integerNPart(opts)) : void 0;
                 var tmpBufSplit = "" != opts.radixPoint ? tmpBuffer.join("").split(opts.radixPoint) : [ tmpBuffer.join("") ], matchRslt = tmpBufSplit[0].match(opts.regex.integerPart(opts)), matchRsltDigits = 2 == tmpBufSplit.length ? tmpBufSplit[1].match(opts.regex.integerNPart(opts)) : void 0;
                 matchRslt && "-0" == matchRslt[matchRslt.index] && (void 0 == matchRsltDigits || matchRsltDigits[matchRsltDigits.index].match(/^0+$/)) && tmpBuffer.splice(0, 1);
                 matchRslt && "-0" == matchRslt[matchRslt.index] && (void 0 == matchRsltDigits || matchRsltDigits[matchRsltDigits.index].match(/^0+$/)) && tmpBuffer.splice(0, 1);
                 var radixPosition = $.inArray(opts.radixPoint, tmpBuffer);
                 var radixPosition = $.inArray(opts.radixPoint, tmpBuffer);
-                if (-1 != radixPosition && isFinite(opts.digits) && !opts.digitsOptional) for (var i = 1; i <= opts.digits; i++) (void 0 == tmpBuffer[radixPosition + i] || tmpBuffer[radixPosition + i] == opts.placeholder.charAt(0)) && (tmpBuffer[radixPosition + i] = "0");
+                if (-1 != radixPosition && isFinite(opts.digits) && !opts.digitsOptional) {
+                    for (var i = 1; i <= opts.digits; i++) (void 0 == tmpBuffer[radixPosition + i] || tmpBuffer[radixPosition + i] == opts.placeholder.charAt(0)) && (tmpBuffer[radixPosition + i] = "0");
+                    return {
+                        refreshFromBuffer: !0,
+                        buffer: tmpBuffer
+                    };
+                }
             },
             },
             regex: {
             regex: {
                 integerPart: function() {
                 integerPart: function() {

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


+ 15 - 23
js/jquery.inputmask.js

@@ -670,8 +670,8 @@
                 }
                 }
                 return getMaskSet()['buffer'];
                 return getMaskSet()['buffer'];
             }
             }
-            function refreshFromBuffer(start, end) {
-                var buffer = getBuffer().slice(); //work on clone
+            function refreshFromBuffer(start, end, buffer) {
+                buffer = buffer || getBuffer().slice(); //pass or work on clone
                 if (start === true) {
                 if (start === true) {
                     resetMaskSet();
                     resetMaskSet();
                     start = 0;
                     start = 0;
@@ -1133,8 +1133,8 @@
                 var valueSet;
                 var valueSet;
                 function PatchValhook(type) {
                 function PatchValhook(type) {
                     if ($.valHooks[type] == undefined || $.valHooks[type].inputmaskpatch != true) {
                     if ($.valHooks[type] == undefined || $.valHooks[type].inputmaskpatch != true) {
-                        var valueGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function (elem) { return elem.value; };
-                        var valueSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function (elem, value) {
+                        var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function (elem) { return elem.value; };
+                        var valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function (elem, value) {
                             elem.value = value;
                             elem.value = value;
                             return elem;
                             return elem;
                         };
                         };
@@ -1146,22 +1146,22 @@
                                     if ($elem.data('_inputmask')['opts'].autoUnmask)
                                     if ($elem.data('_inputmask')['opts'].autoUnmask)
                                         return $elem.inputmask('unmaskedvalue');
                                         return $elem.inputmask('unmaskedvalue');
                                     else {
                                     else {
-                                        var result = valueGet(elem),
+                                        var result = valhookGet(elem),
                                             inputData = $elem.data('_inputmask'),
                                             inputData = $elem.data('_inputmask'),
                                             maskset = inputData['maskset'],
                                             maskset = inputData['maskset'],
                                             bufferTemplate = maskset['_buffer'];
                                             bufferTemplate = maskset['_buffer'];
                                         bufferTemplate = bufferTemplate ? bufferTemplate.join('') : '';
                                         bufferTemplate = bufferTemplate ? bufferTemplate.join('') : '';
                                         return result != bufferTemplate ? result : '';
                                         return result != bufferTemplate ? result : '';
                                     }
                                     }
-                                } else return valueGet(elem);
+                                } else return valhookGet(elem);
                             },
                             },
                             set: function (elem, value) {
                             set: function (elem, value) {
                                 var $elem = $(elem), inputData = $elem.data('_inputmask'), result;
                                 var $elem = $(elem), inputData = $elem.data('_inputmask'), result;
                                 if (inputData) {
                                 if (inputData) {
-                                    result = valueSet(elem, $.isFunction(inputData['opts'].onBeforeMask) ? (inputData['opts'].onBeforeMask.call(el, value, inputData['opts']) || value) : value);
+                                    result = valhookSet(elem, $.isFunction(inputData['opts'].onBeforeMask) ? (inputData['opts'].onBeforeMask.call(el, value, inputData['opts']) || value) : value);
                                     $elem.triggerHandler('setvalue.inputmask');
                                     $elem.triggerHandler('setvalue.inputmask');
                                 } else {
                                 } else {
-                                    result = valueSet(elem, value);
+                                    result = valhookSet(elem, value);
                                 }
                                 }
                                 return result;
                                 return result;
                             },
                             },
@@ -1299,10 +1299,11 @@
                     getMaskSet()["p"] = pos.begin;
                     getMaskSet()["p"] = pos.begin;
                 }
                 }
             }
             }
+            //postprocessing of the validpositions according to the buffer manipulations
             function handleOnKeyResult(input, keyResult, caretPos) {
             function handleOnKeyResult(input, keyResult, caretPos) {
                 if (keyResult && keyResult["refreshFromBuffer"]) {
                 if (keyResult && keyResult["refreshFromBuffer"]) {
                     var refresh = keyResult["refreshFromBuffer"];
                     var refresh = keyResult["refreshFromBuffer"];
-                    refreshFromBuffer(refresh === true ? refresh : refresh["start"], refresh["end"]);
+                    refreshFromBuffer(refresh === true ? refresh : refresh["start"], refresh["end"], keyResult["buffer"]);
 
 
                     resetMaskSet(true);
                     resetMaskSet(true);
                     if (caretPos != undefined) {
                     if (caretPos != undefined) {
@@ -1456,18 +1457,6 @@
                 var currentCaretPos = caret(input);
                 var currentCaretPos = caret(input);
                 var keyupResult = opts.onKeyUp.call(this, e, buffer, currentCaretPos.begin, opts);
                 var keyupResult = opts.onKeyUp.call(this, e, buffer, currentCaretPos.begin, opts);
                 handleOnKeyResult(input, keyupResult, currentCaretPos);
                 handleOnKeyResult(input, keyupResult, currentCaretPos);
-                if (k == $.inputmask.keyCode.TAB && opts.showMaskOnFocus) {
-                    if ($input.is(":focus") && input._valueGet().length == 0) {
-                        resetMaskSet();
-                        buffer = getBuffer();
-                        writeBuffer(input, buffer);
-                        caret(input, 0);
-                        valueOnFocus = getBuffer().join('');
-                    } else {
-                        writeBuffer(input, buffer);
-                        caret(input, TranslatePosition(0), TranslatePosition(getMaskLength()));
-                    }
-                }
             }
             }
             function pasteEvent(e) {
             function pasteEvent(e) {
                 if (skipInputEvent === true && e.type == "input") {
                 if (skipInputEvent === true && e.type == "input") {
@@ -1633,9 +1622,12 @@
                                 }
                                 }
 
 
                                 if ($.isFunction(opts.postProcessOnBlur)) {
                                 if ($.isFunction(opts.postProcessOnBlur)) {
-                                    opts.postProcessOnBlur.call(input, buffer, opts);
+                                    var keyResult = opts.postProcessOnBlur.call(input, buffer, opts);
+                                    if (keyResult) {
+                                        handleOnKeyResult(input, keyResult);
+                                        buffer = getBuffer();
+                                    }
                                 }
                                 }
-
                                 writeBuffer(input, buffer);
                                 writeBuffer(input, buffer);
                             }
                             }
                         }
                         }

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

@@ -138,6 +138,7 @@ Optional extensions on the jquery.inputmask base
                     for (var i = 1; i <= opts.digits; i++) {
                     for (var i = 1; i <= opts.digits; i++) {
                         if (tmpBuffer[radixPosition + i] == undefined || tmpBuffer[radixPosition + i] == opts.placeholder.charAt(0)) tmpBuffer[radixPosition + i] = "0";
                         if (tmpBuffer[radixPosition + i] == undefined || tmpBuffer[radixPosition + i] == opts.placeholder.charAt(0)) tmpBuffer[radixPosition + i] = "0";
                     }
                     }
+                    return { "refreshFromBuffer": true, "buffer": tmpBuffer };
                 }
                 }
             },
             },
             regex: {
             regex: {

+ 14 - 1
qunit/tests_numeric.js

@@ -707,7 +707,7 @@ test("decimal alias set value with val() - kochelmonster", function () {
     $("#testmask").remove();
     $("#testmask").remove();
 });
 });
 
 
-test("inputmask(\"decimal\") - value=\"123.1\" blur", function () {
+test("inputmask(\"decimal\") - value=\"123.1\" blur digitsoptional", function () {
     var $fixture = $("#qunit-fixture");
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" />');
     $fixture.append('<input type="text" id="testmask" />');
     $("#testmask").inputmask("decimal", { digits: 3 });
     $("#testmask").inputmask("decimal", { digits: 3 });
@@ -716,6 +716,19 @@ test("inputmask(\"decimal\") - value=\"123.1\" blur", function () {
     $("#testmask").Type("123.1");
     $("#testmask").Type("123.1");
     $("#testmask").blur();
     $("#testmask").blur();
 
 
+    equal($("#testmask").val(), "123.1", "Result " + $("#testmask").val());
+    $("#testmask").remove();
+});
+
+test("inputmask(\"decimal\") - value=\"123.1\" blur", function () {
+    var $fixture = $("#qunit-fixture");
+    $fixture.append('<input type="text" id="testmask" />');
+    $("#testmask").inputmask("decimal", { digits: 3, digitsOptional: false });
+
+    $("#testmask")[0].focus();
+    $("#testmask").Type("123.1");
+    $("#testmask").blur();
+
     equal($("#testmask").val(), "123.100", "Result " + $("#testmask").val());
     equal($("#testmask").val(), "123.100", "Result " + $("#testmask").val());
     $("#testmask").remove();
     $("#testmask").remove();
 });
 });