Browse Source

minor fixes for numerics

Robin Herbots 12 years ago
parent
commit
d8189fdccb
1 changed files with 21 additions and 18 deletions
  1. 21 18
      js/jquery.inputmask.js

+ 21 - 18
js/jquery.inputmask.js

@@ -611,7 +611,7 @@
                     ms["p"] = isRTL ? getMaskLength() : 0;
                 });
                 if (strict !== true) activeMasksetIndex = 0;
-                writeBuffer(input, getActiveBuffer(), getActiveMaskSet()["p"]);
+                caret(input, getActiveMaskSet()["p"]);
 
                 if (isRTL && !opts.numericInput)
                     inputValue = inputValue.reverse();
@@ -619,7 +619,8 @@
                 var ml = getMaskLength();
                 $.each(inputValue, function (ndx, charCode) {
                     if (!strict || isMask(isRTL ? (opts.numericInput ? seekPrevious(ml) : ml - ndx - 1) : ndx)) {
-                        $(input).trigger("keypress", [true, charCode.charCodeAt(0), writeOut, strict]);
+                        var index = isRTL ? (opts.numericInput ? ml : ml - ndx - 1) : ndx;
+                        $(input).trigger("keypress", [true, charCode.charCodeAt(0), writeOut, strict, index]);
                     }
                 });
                 if (strict)
@@ -662,7 +663,7 @@
             function unmaskedvalue($input, skipDatepickerCheck) {
                 var input = $input[0];
                 if (getActiveTests() && (skipDatepickerCheck === true || !$input.hasClass('hasDatepicker'))) {
-                    checkVal(input, false); //TODO FIXME CHECK THIS PLEASE
+                    checkVal(input, false, true);
                     return $.map(getActiveBuffer(), function (element, index) {
                         return isMask(index) && isValid(index, element, true) ? element : null;
                     }).join('');
@@ -863,7 +864,7 @@
                             determineInputDirection(input, selectedCaret);
                             if (isRTL) {
                                 if (opts.numericInput) {
-                                    lastPosition = opts.skipRadixDance === false && opts.radixPoint != "" && $.inArray(opts.radixPoint, buffer) != -1 ? $.inArray(opts.radixPoint, buffer) : seekNext(lvp == undefined ? getMaskLength() : lvp + 1);
+                                    lastPosition = opts.skipRadixDance === false && opts.radixPoint != "" && $.inArray(opts.radixPoint, buffer) != -1 ? $.inArray(opts.radixPoint, buffer) : getMaskLength();
                                 } else {
                                     lastPosition = seekPrevious((lvp == undefined ? getMaskLength() : lvp) + 1);
                                 }
@@ -889,7 +890,7 @@
                 ).bind(pasteEvent + ".inputmask dragdrop.inputmask drop.inputmask", function () {
                     var input = this, buffer = getActiveBuffer();
                     setTimeout(function () {
-                        caret(input, checkVal(input, true, true));
+                        caret(input, checkVal(input, true, false));
                         if (isComplete(buffer))
                             $input.trigger("complete");
                     }, 0);
@@ -1222,15 +1223,17 @@
                     } else if (k == opts.keyCode.INSERT) {//insert
                         opts.insertMode = !opts.insertMode;
                         caret(input, !opts.insertMode && pos.begin == getMaskLength() ? pos.begin - 1 : pos.begin);
-                    } else if (!e.shiftKey) {
-                        if (k == opts.keyCode.RIGHT) {//right
-                            var caretPos = pos.begin == pos.end ? pos.end + 1 : pos.end;
-                            caretPos = caretPos < getMaskLength() ? caretPos : pos.end;
-                            caret(input, e.shiftKey ? pos.begin : caretPos, e.shiftKey ? caretPos + 1 : caretPos);
-                        } else if (k == opts.keyCode.LEFT) {//left
-                            var caretPos = pos.begin - 1;
-                            caretPos = caretPos > 0 ? caretPos : 0;
-                            caret(input, caretPos, e.shiftKey ? pos.end : caretPos);
+                    } else if (opts.insertMode == false && !e.shiftKey) {
+                        if (k == opts.keyCode.RIGHT) {
+                            setTimeout(function () {
+                                var caretPos = caret(input);
+                                caret(input, caretPos.begin);
+                            }, 0);
+                        } else if (k == opts.keyCode.LEFT) {
+                            setTimeout(function () {
+                                var caretPos = caret(input);
+                                caret(input, caretPos.begin - 1);
+                            }, 0);
                         }
                     }
 
@@ -1238,7 +1241,7 @@
                     ignorable = $.inArray(k, opts.ignorables) != -1;
                 }
 
-                function keypressEvent(e, checkval, k, writeOut, strict) {
+                function keypressEvent(e, checkval, k, writeOut, strict, ndx) {
                     //Safari 5.1.x - modal dialog fires keypress twice workaround
                     if (k == undefined && skipKeyPressEvent) return false;
                     skipKeyPressEvent = true;
@@ -1261,7 +1264,7 @@
                         if (k) {
                             var pos, results, result;
                             if (checkval) {
-                                var pcaret = getActiveMaskSet()["p"];
+                                var pcaret = strict ? ndx : getActiveMaskSet()["p"];
                                 pos = { begin: pcaret, end: pcaret };
                             } else {
                                 pos = caret(input);
@@ -1323,7 +1326,7 @@
                                                 } else getActiveMaskSet()["writeOutBuffer"] = false;
                                             } else setBufferElement(buffer, p, c, true, isRTL);
                                         }
-                                        getActiveMaskSet()["p"] = opts.numericInput ? p + 1 : p;
+                                        getActiveMaskSet()["p"] = p;
                                     }
                                 });
 
@@ -1339,7 +1342,7 @@
                                         setTimeout(function () { opts.onKeyValidation.call(this, result["result"], opts); }, 0);
                                         if (getActiveMaskSet()["writeOutBuffer"] && result["result"] !== false) {
                                             var buffer = getActiveBuffer();
-                                            writeBuffer(input, buffer, getActiveMaskSet()["p"]);
+                                            writeBuffer(input, buffer, opts.numericInput ? seekNext(getActiveMaskSet()["p"]) : getActiveMaskSet()["p"]);
                                             setTimeout(function () { //timeout needed for IE
                                                 if (isComplete(buffer))
                                                     $input.trigger("complete");