Robin Herbots 11 years ago
parent
commit
3d99887ac1
2 changed files with 47 additions and 27 deletions
  1. 42 27
      js/jquery.inputmask.js
  2. 5 0
      js/jquery.inputmask.phone.extensions.js

+ 42 - 27
js/jquery.inputmask.js

@@ -1352,18 +1352,18 @@
         };
 
         function multiMaskScope(el, masksets, opts) {
+            var $el = $(el);
             opts.nojumps = true;
-            function caret(input, begin, end) {
+            function mcaret(input, begin, end) {
                 var npt = input.jquery && input.length > 0 ? input[0] : input, range;
                 if (typeof begin == 'number') {
                     end = (typeof end == 'number') ? end : begin;
 
-                    //store caret for multi scope
-                    var data = $(input).data('_inputmask') || {};
-                    data["caret"] = { "begin": begin, "end": end };
-                    $(input).data('_inputmask', data);
-
-                    if (!$(npt).is(':visible')) {
+                    if (!$(npt).is(':visible') && input != el) { //do not touch the host input
+                        //store caret for multi scope
+                        var data = $(input).data('_inputmask') || {};
+                        data["caret"] = { "begin": begin, "end": end };
+                        $(input).data('_inputmask', data);
                         return;
                     }
 
@@ -1399,7 +1399,7 @@
 
             var activeMasksetIndex = 0,
                 elmasks = $.map(masksets, function (msk, ndx) {
-                    var elmask = $('<input type="text" />')[0];
+                    var elmask = $('<input type="text" value="' + $el.attr("value") + '" />')[0];
                     maskScope($.extend(true, {}, msk), opts, { "action": "mask", "el": elmask });
                     return elmask;
                 });
@@ -1416,28 +1416,34 @@
                             if (psNdx > lastValidPosition) lastValidPosition = psNdx;
                             positionCount++;
                         }
-                        if (lastValidPosition > lvp && positionCount > lpc) {
-                            lvp = lastValidPosition;
-                            lpc = positionCount;
-                            activeMasksetIndex = ndx;
+                        if (positionCount >= lpc) {
+                            if ((lastValidPosition < lvp && positionCount == lpc) || positionCount > lpc) {
+                                lvp = lastValidPosition;
+                                lpc = positionCount;
+                                activeMasksetIndex = ndx;
+                            }
                         }
                     });
 
                     if ($.isFunction(opts.determineActiveMasksetIndex)) activeMasksetIndex = opts.determineActiveMasksetIndex.call($el, eventType, elmasks);
                 }
-                console.log(elmasks[activeMasksetIndex]._valueGet());
-                $(el).val(elmasks[activeMasksetIndex]._valueGet());
+
+                if ($(el).val() == "") {
+                    $el.val(elmasks[activeMasksetIndex]._valueGet());
+                    mcaret(el, 0, $el.val().length);
+                }
+                if (["focus"].indexOf(eventType) == -1 && $el.val() != elmasks[activeMasksetIndex]._valueGet()) {
+                    $el.val(elmasks[activeMasksetIndex]._valueGet());
+                }
                 if (["blur", "focus"].indexOf(eventType) == -1) {
-                    console.log("2 " + eventType);
                     if ($(elmasks[activeMasksetIndex]).hasClass("focus.inputmask")) {
-                        var activeCaret = caret(elmasks[activeMasksetIndex]);
-                        caret(el, activeCaret.begin, activeCaret.end);
+                        var activeCaret = mcaret(elmasks[activeMasksetIndex]);
+                        mcaret(el, activeCaret.begin, activeCaret.end);
                     }
                 }
             }
-            $(el).bind("mouseenter blur focus mouseleave click dblclick " + PasteEventType + " dragdrop drop keydown keypress keypress", function (e) {
-                //console.log(e.type);
-                var caretPos = caret(el), k, goDetermine = true;
+            $el.bind("mouseenter blur focus mouseleave click dblclick " + PasteEventType + " dragdrop drop keydown keypress keypress", function (e) {
+                var caretPos = mcaret(el), k, goDetermine = true;
                 if (e.type == "keydown") {
                     k = e.keyCode;
                     if (k == opts.keyCode.DOWN && activeMasksetIndex < elmasks.length - 1) {
@@ -1448,7 +1454,11 @@
                         activeMasksetIndex--;
                         determineActiveMask("multiMaskScope", elmasks);
                         return false;
+                    } if (e.ctrlKey || e.shiftKey || e.altKey) {
+                        return true;
                     }
+                } else if (e.type == "keypress" && (e.ctrlKey || e.shiftKey || e.altKey)) {
+                    return true;
                 }
                 $.each(elmasks, function (ndx, lmnt) {
                     if (e.type == "keydown") {
@@ -1456,34 +1466,39 @@
 
                         if (k == opts.keyCode.BACKSPACE & lmnt._valueGet().length < caretPos.begin) {
                             return;
-                        }
-                        else if (k == opts.keyCode.RIGHT) {
-                            caret(lmnt, caretPos.begin + 1, caretPos.end + 1);
+                        } else if (k == opts.keyCode.TAB) {
+                            goDetermine = false;
+                        } else if (k == opts.keyCode.RIGHT) {
+                            mcaret(lmnt, caretPos.begin + 1, caretPos.end + 1);
                             goDetermine = false;
                             return;
                         } else if (k == opts.keyCode.LEFT) {
-                            caret(lmnt, caretPos.begin - 1, caretPos.end - 1);
+                            mcaret(lmnt, caretPos.begin - 1, caretPos.end - 1);
                             goDetermine = false;
                             return;
                         }
                     }
                     if (["click"].indexOf(e.type) != -1 && caretPos.begin != caretPos.end) {
-                        caret(lmnt, caretPos.begin, caretPos.end);
+                        mcaret(lmnt, caretPos.begin, caretPos.end);
                         goDetermine = false;
                         return;
                     }
 
                     if (["click", "keydown"].indexOf(e.type) != -1) {
-                        caret(lmnt, caretPos.begin, caretPos.end);
+                        mcaret(lmnt, caretPos.begin, caretPos.end);
                     }
                     $(lmnt).triggerHandler(e);
                 });
                 if (goDetermine) {
                     setTimeout(function () {
                         determineActiveMask(e.type, elmasks);
-                    }, 5);
+                    }, 0);
                 }
             });
+
+            setTimeout(function () {
+                determineActiveMask("init", elmasks);
+            }, 0);
         };
 
         $.inputmask = {

+ 5 - 0
js/jquery.inputmask.phone.extensions.js

@@ -45,6 +45,11 @@ When using this extension make sure you specify the correct url to get the masks
                 //maskList.splice(0, 0, "+p(ppp)ppp-pppp");
                 return maskList;
             },
+            nojumpsThreshold: 1
+        },
+        'phonebe': {
+            alias: "phone",
+            url: "phone-codes/phone-be.json",
             nojumpsThreshold: 4
         }
     });