浏览代码

some fixes for IE7&8&FF

Robin Herbots 11 年之前
父节点
当前提交
a301ddf69e

+ 1 - 1
bower.json

@@ -1,6 +1,6 @@
 {
   "name": "jquery.inputmask",
-  "version": "3.0.59",
+  "version": "3.0.60",
   "main": "./dist/jquery.inputmask.bundle.js",
   "keywords" : ["jQuery", "plugins", "input", "form", "inputmask", "mask"],
   "description": "jquery.inputmask is a jquery plugin which create an input mask.",

+ 1 - 1
build.properties

@@ -7,7 +7,7 @@ distdir = dist
 
 build.major = 3
 build.minor = 0
-build.revision = 59
+build.revision = 60
 
 target = jquery.inputmask.bundle.js
 target.min = jquery.inputmask.bundle.min.js

+ 34 - 77
dist/jquery.inputmask.bundle.js

@@ -3,15 +3,13 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2014 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.0.59
+* Version: 3.0.60
 */
 
 (function (factory) {
     if (typeof define === 'function' && define.amd) {
-        // AMD. Register as an anonymous module.
         define("jquery.inputmask", ['jquery'], factory);
     } else {
-        // Browser globals
         factory(jQuery);
     }
 }(function ($) {
@@ -91,7 +89,10 @@
                             // Group closing
                             openingToken = openenings.pop();
                             if (openenings.length > 0) {
-                                openenings[openenings.length - 1]["matches"].push(openingToken);
+                                var currentOpeningToken = openenings[openenings.length - 1];
+                                currentOpeningToken["matches"].push(openingToken);
+                                if (currentOpeningToken.isAlternator)
+                                    openenings.pop();
                             } else {
                                 currentToken.matches.push(openingToken);
                             }
@@ -1811,14 +1812,16 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2014 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.0.59
+* Version: 3.0.60
+*
+*  THIS IS A TEMPORARY HACK TO BE COMPATIBLE WITH MULTIPLE MASKS LIKE IN VERSION 2.X - WHEN THE ALTERNATOR SYNTAX IS IMPLEMENTED inputmask-multi WILL BE DELETED!!
+*
+*
 */
 (function (factory) {
     if (typeof define === 'function' && define.amd) {
-        // AMD. Register as an anonymous module.
         define("jquery.inputmask-multi", ['jquery', 'jquery.inputmask'], factory);
     } else {
-        // Browser globals
         factory(jQuery);
     }
 }(function ($) {
@@ -1976,13 +1979,15 @@
                 isRTL = el.dir == "rtl" || opts.numericInput;
                 activeMasksetIndex = 0;
                 elmasks = $.map(masksets, function (msk, ndx) {
-                    var elMaskStr = '<input type="text" ';
-                    if ($el.attr("value")) elMaskStr += 'value="' + $el.attr("value") + '" ';
-                    if ($el.attr("dir")) elMaskStr += 'dir="' + $el.attr("dir") + '" ';
-                    elMaskStr += '/>';
-                    var elmask = $(elMaskStr)[0];
-                    $(elmask).inputmask($.extend({}, opts, { mask: msk.mask }));
-                    return elmask;
+                    if (isFinite(ndx)) { //handle extension in the prototype of array for ie8
+                        var elMaskStr = '<input type="text" ';
+                        if ($el.attr("value")) elMaskStr += 'value="' + $el.attr("value") + '" ';
+                        if ($el.attr("dir")) elMaskStr += 'dir="' + $el.attr("dir") + '" ';
+                        elMaskStr += '/>';
+                        var elmask = $(elMaskStr)[0];
+                        $(elmask).inputmask($.extend({}, opts, { mask: msk.mask }));
+                        return elmask;
+                    }
                 });
 
                 $el.data('_inputmask-multi', { "activeMasksetIndex": 0, "elmasks": elmasks });
@@ -2082,44 +2087,6 @@
                     case "mask":
                         mask(actionObj["el"]);
                         break;
-                    case "remove": //TODO
-                        var el = actionObj["el"];
-                        $el = $(el);
-                        maskset = $el.data('_inputmask')['maskset'];
-                        opts = $el.data('_inputmask')['opts'];
-                        //writeout the unmaskedvalue
-                        el._valueSet(unmaskedvalue($el));
-                        //unbind all events
-                        $el.unbind(".inputmask");
-                        $el.removeClass('focus-inputmask');
-                        //clear data
-                        $el.removeData('_inputmask');
-                        //restore the value property
-                        var valueProperty;
-                        if (Object.getOwnPropertyDescriptor)
-                            valueProperty = Object.getOwnPropertyDescriptor(el, "value");
-                        if (valueProperty && valueProperty.get) {
-                            if (el._valueGet) {
-                                Object.defineProperty(el, "value", {
-                                    get: el._valueGet,
-                                    set: el._valueSet
-                                });
-                            }
-                        } else if (document.__lookupGetter__ && el.__lookupGetter__("value")) {
-                            if (el._valueGet) {
-                                el.__defineGetter__("value", el._valueGet);
-                                el.__defineSetter__("value", el._valueSet);
-                            }
-                        }
-                        try { //try catch needed for IE7 as it does not supports deleting fns
-                            delete el._valueGet;
-                            delete el._valueSet;
-                        } catch (e) {
-                            el._valueGet = undefined;
-                            el._valueSet = undefined;
-
-                        }
-                        break;
                 }
             }
         };
@@ -2150,16 +2117,14 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2014 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 3.0.59
+Version: 3.0.60
 
 Optional extensions on the jquery.inputmask base
 */
 (function (factory) {
     if (typeof define === 'function' && define.amd) {
-        // AMD. Register as an anonymous module.
         define("jquery.inputmask.extensions", ['jquery', 'jquery.inputmask'], factory);
     } else {
-        // Browser globals
         factory(jQuery);
     }
 }(function ($) {
@@ -2279,16 +2244,14 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2014 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 3.0.59
+Version: 3.0.60
 
 Optional extensions on the jquery.inputmask base
 */
 (function (factory) {
     if (typeof define === 'function' && define.amd) {
-        // AMD. Register as an anonymous module.
         define("jquery.inputmask.date.extensions", ['jquery', 'jquery.inputmask'], factory);
     } else {
-        // Browser globals
         factory(jQuery);
     }
 }(function ($) {
@@ -2479,15 +2442,15 @@ Optional extensions on the jquery.inputmask base
 
                             isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
                             if (isValid) {
-                                maskset.buffer[pos++] = yearPrefix[0];
+                                maskset.buffer[pos++] = yearPrefix.charAt(0);
                                 return { "pos": pos };
                             }
                             yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 2);
 
                             isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
                             if (isValid) {
-                                maskset.buffer[pos++] = yearPrefix[0];
-                                maskset.buffer[pos++] = yearPrefix[1];
+                                maskset.buffer[pos++] = yearPrefix.charAt(0);
+                                maskset.buffer[pos++] = yearPrefix.charAt(1);
                                 return { "pos": pos };
                             }
                         }
@@ -2503,7 +2466,7 @@ Optional extensions on the jquery.inputmask base
 
                             isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear);
                             if (isValid) {
-                                maskset.buffer[pos++] = yearPrefix[1];
+                                maskset.buffer[pos++] = yearPrefix.charAt(1);
                                 return { "pos": pos };
                             }
 
@@ -2524,9 +2487,9 @@ Optional extensions on the jquery.inputmask base
                                 }
                             } else isValid = false;
                             if (isValid) {
-                                maskset.buffer[pos - 1] = yearPrefix[0];
-                                maskset.buffer[pos++] = yearPrefix[1];
-                                maskset.buffer[pos++] = chrs[0];
+                                maskset.buffer[pos - 1] = yearPrefix.charAt(0);
+                                maskset.buffer[pos++] = yearPrefix.charAt(1);
+                                maskset.buffer[pos++] = chrs.charAt(0);
                                 return { "refreshFromBuffer": { start: pos - 3, end: pos }, "pos": pos };
                             }
                         }
@@ -2775,16 +2738,14 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2014 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 3.0.59
+Version: 3.0.60
 
 Optional extensions on the jquery.inputmask base
 */
 (function (factory) {
     if (typeof define === 'function' && define.amd) {
-        // AMD. Register as an anonymous module.
         define("jquery.inputmask.numeric.extensions", ['jquery', 'jquery.inputmask'], factory);
     } else {
-        // Browser globals
         factory(jQuery);
     }
 }(function ($) {
@@ -2915,7 +2876,7 @@ Optional extensions on the jquery.inputmask base
                                 //handle 0 for integerpart
                                 var matchRslt = maskset.buffer.join('').match(opts.regex.integerPart(opts)), radixPosition = $.inArray(opts.radixPoint, maskset.buffer);
                                 if (matchRslt) {
-                                    if (matchRslt["0"][0].indexOf("0") == 0 && pos >= opts.prefix.length) {
+                                    if (matchRslt["0"].indexOf("0") == 0 && pos >= opts.prefix.length) {
                                         if (radixPosition == -1 || (pos <= radixPosition && maskset["validPositions"][radixPosition] == undefined)) {
                                             maskset.buffer.splice(matchRslt.index, 1);
                                             pos = pos > matchRslt.index ? pos - 1 : matchRslt.index;
@@ -3027,17 +2988,15 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2014 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 3.0.59
+Version: 3.0.60
 
 Regex extensions on the jquery.inputmask base
 Allows for using regular expressions as a mask
 */
 (function (factory) {
     if (typeof define === 'function' && define.amd) {
-        // AMD. Register as an anonymous module.
         define("jquery.inputmask.regex.extensions", ['jquery', 'jquery.inputmask'], factory);
     } else {
-        // Browser globals
         factory(jQuery);
     }
 }(function ($) {
@@ -3160,7 +3119,7 @@ Allows for using regular expressions as a mask
                                     }
                                 } else {
                                     var testExp;
-                                    if (matchToken[0] == "[") {
+                                    if (matchToken.charAt(0) == "[") {
                                         testExp = regexPart;
                                         testExp += matchToken;
                                         for (var j = 0; j < openGroupCount; j++) {
@@ -3170,7 +3129,7 @@ Allows for using regular expressions as a mask
                                         isvalid = exp.test(bufferStr);
                                     } else {
                                         for (var l = 0, tl = matchToken.length; l < tl; l++) {
-                                            if (matchToken[l] == "\\") continue;
+                                            if (matchToken.charAt(l) == "\\") continue;
                                             testExp = regexPart;
                                             testExp += matchToken.substr(0, l + 1);
                                             testExp = testExp.replace(/\|$/, "");
@@ -3222,7 +3181,7 @@ Input Mask plugin extensions
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 - 2014 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 3.0.59
+Version: 3.0.60
 
 Phone extension.
 When using this extension make sure you specify the correct url to get the masks
@@ -3238,10 +3197,8 @@ When using this extension make sure you specify the correct url to get the masks
 */
 (function (factory) {
     if (typeof define === 'function' && define.amd) {
-        // AMD. Register as an anonymous module.
         define("jquery.inputmask.phone.extensions", ['jquery', 'jquery.inputmask'], factory);
     } else {
-        // Browser globals
         factory(jQuery);
     }
 }(function ($) {

文件差异内容过多而无法显示
+ 90 - 87
dist/jquery.inputmask.bundle.min.js


文件差异内容过多而无法显示
+ 15 - 12
dist/min/jquery.inputmask-multi.js


文件差异内容过多而无法显示
+ 10 - 10
dist/min/jquery.inputmask.date.extensions.js


文件差异内容过多而无法显示
+ 51 - 51
dist/min/jquery.inputmask.js


文件差异内容过多而无法显示
+ 1 - 1
dist/min/jquery.inputmask.numeric.extensions.js


文件差异内容过多而无法显示
+ 2 - 2
dist/min/jquery.inputmask.regex.extensions.js


+ 1 - 1
jquery.inputmask.jquery.json

@@ -8,7 +8,7 @@
 		"inputmask",
 		"mask"
     ],
-    "version": "3.0.59",
+    "version": "3.0.60",
     "author": {
         "name": "Robin Herbots",
         "url": "http://github.com/RobinHerbots/jquery.inputmask"

+ 7 - 7
js/jquery.inputmask.date.extensions.js

@@ -201,15 +201,15 @@ Optional extensions on the jquery.inputmask base
 
                             isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
                             if (isValid) {
-                                maskset.buffer[pos++] = yearPrefix[0];
+                                maskset.buffer[pos++] = yearPrefix.charAt(0);
                                 return { "pos": pos };
                             }
                             yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 2);
 
                             isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
                             if (isValid) {
-                                maskset.buffer[pos++] = yearPrefix[0];
-                                maskset.buffer[pos++] = yearPrefix[1];
+                                maskset.buffer[pos++] = yearPrefix.charAt(0);
+                                maskset.buffer[pos++] = yearPrefix.charAt(1);
                                 return { "pos": pos };
                             }
                         }
@@ -225,7 +225,7 @@ Optional extensions on the jquery.inputmask base
 
                             isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear);
                             if (isValid) {
-                                maskset.buffer[pos++] = yearPrefix[1];
+                                maskset.buffer[pos++] = yearPrefix.charAt(1);
                                 return { "pos": pos };
                             }
 
@@ -246,9 +246,9 @@ Optional extensions on the jquery.inputmask base
                                 }
                             } else isValid = false;
                             if (isValid) {
-                                maskset.buffer[pos - 1] = yearPrefix[0];
-                                maskset.buffer[pos++] = yearPrefix[1];
-                                maskset.buffer[pos++] = chrs[0];
+                                maskset.buffer[pos - 1] = yearPrefix.charAt(0);
+                                maskset.buffer[pos++] = yearPrefix.charAt(1);
+                                maskset.buffer[pos++] = chrs.charAt(0);
                                 return { "refreshFromBuffer": { start: pos - 3, end: pos }, "pos": pos };
                             }
                         }

+ 3 - 3
js/jquery.inputmask.js

@@ -89,9 +89,9 @@
                             // Group closing
                             openingToken = openenings.pop();
                             if (openenings.length > 0) {
-                                openingToken = openenings[openenings.length - 1];
-                                openingToken["matches"].push(openingToken);
-                                if (openingToken.isAlternator)
+                                var currentOpeningToken = openenings[openenings.length - 1];
+                                currentOpeningToken["matches"].push(openingToken);
+                                if (currentOpeningToken.isAlternator)
                                     openenings.pop();
                             } else {
                                 currentToken.matches.push(openingToken);

+ 2 - 2
js/jquery.inputmask.regex.extensions.js

@@ -134,7 +134,7 @@ Allows for using regular expressions as a mask
                                     }
                                 } else {
                                     var testExp;
-                                    if (matchToken[0] == "[") {
+                                    if (matchToken.charAt(0) == "[") {
                                         testExp = regexPart;
                                         testExp += matchToken;
                                         for (var j = 0; j < openGroupCount; j++) {
@@ -144,7 +144,7 @@ Allows for using regular expressions as a mask
                                         isvalid = exp.test(bufferStr);
                                     } else {
                                         for (var l = 0, tl = matchToken.length; l < tl; l++) {
-                                            if (matchToken[l] == "\\") continue;
+                                            if (matchToken.charAt(l) == "\\") continue;
                                             testExp = regexPart;
                                             testExp += matchToken.substr(0, l + 1);
                                             testExp = testExp.replace(/\|$/, "");

+ 1 - 1
qunit/simulator.js

@@ -92,6 +92,6 @@ $.fn.Type = function (inputStr) {
 
 $.fn.paste = function (inputStr) {
     var $input = $(this);
-    $input[0]._valueSet(inputStr);
+    window.clipboardData ? window.clipboardData.setData("Text", inputStr) : $input[0]._valueSet(inputStr);
     $input.trigger('paste');
 }

+ 2 - 0
qunit/tests_base.js

@@ -567,6 +567,7 @@ asyncTest("inputmask(\"+7 (999) 999-99-99\") ~ paste \"+7 (+79114041112___) ___-
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" />');
     $("#testmask").inputmask("+7 (999) 999-99-99");
+    $("#testmask")[0].focus();
     $("#testmask").paste("+7 (+79114041112___) ___-__-__");
 
     setTimeout(function () {
@@ -587,6 +588,7 @@ asyncTest("inputmask(\"+7 (999) 999-99-99\") ~ paste \"0079114041112\" - monobla
             return strippedValue;
         }
     });
+    $("#testmask")[0].focus();
     $("#testmask").paste("0079114041112");
 
     setTimeout(function () {

+ 6 - 4
qunit/tests_dynamic.js

@@ -59,7 +59,7 @@ test("email mask greedy false", function () {
 
     $("#testmask").remove();
 });
-test("email mask greedy true", function () {
+asyncTest("email mask greedy true", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" />');
     $("#testmask").inputmask("email", { greedy: true });
@@ -67,9 +67,11 @@ test("email mask greedy true", function () {
     $("#testmask")[0].focus();
     $("#testmask").Type("some.body@mail.com");
     $("#testmask").blur();
-    equal($("#testmask").val(), "some.body@mail.com", "Result " + $("#testmask").val());
-
-    $("#testmask").remove();
+    setTimeout(function () {
+        start();
+        equal($("#testmask").val(), "some.body@mail.com", "Result " + $("#testmask").val());
+        $("#testmask").remove();
+    }, 0);
 });
 
 test("email mask - partial input", function () {

+ 4 - 4
qunit/tests_formatvalidate.js

@@ -84,7 +84,7 @@ test("YoussefTaghlabi isValid(\"123,456.78\", { alias: \"decimal\" }", function
     var isValid = $.inputmask.isValid("123,456.78", {
         alias: "decimal", radixPoint: ".",
         groupSeparator: ",",
-        groupSize: 3,
+        groupSize: 3
     });
     equal(isValid, true, "Result " + isValid);
 });
@@ -92,7 +92,7 @@ test("YoussefTaghlabi isValid(\"12,\", { alias: \"decimal\" }", function () {
     var isValid = $.inputmask.isValid("12,", {
         alias: "decimal", radixPoint: ".",
         groupSeparator: ",",
-        groupSize: 3,
+        groupSize: 3
     });
     equal(isValid, false, "Result " + isValid);
 });
@@ -100,7 +100,7 @@ test("YoussefTaghlabi isValid(\"12,1.45\", { alias: \"decimal\" }", function ()
     var isValid = $.inputmask.isValid("12,1.45", {
         alias: "decimal", radixPoint: ".",
         groupSeparator: ",",
-        groupSize: 3,
+        groupSize: 3
     });
     equal(isValid, false, "Result " + isValid);
 });
@@ -108,7 +108,7 @@ test("YoussefTaghlabi isValid(\"12,345.67\", { alias: \"decimal\" }", function (
     var isValid = $.inputmask.isValid("12,345.67", {
         alias: "decimal", radixPoint: ".",
         groupSeparator: ",",
-        groupSize: 3,
+        groupSize: 3
     });
     equal(isValid, true, "Result " + isValid);
 });

+ 34 - 22
qunit/tests_ip.js

@@ -1,60 +1,72 @@
-module("IP - masks")
-test("inputmask(\"ip\" - 10.10.10.10", function () {
+module("IP - masks");
+asyncTest("inputmask(\"ip\" - 10.10.10.10", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" />');
     $fixture.append('<input type="text" id="testmask2" />');
-    $("#testmask").inputmask("ip")
+    $("#testmask").inputmask("ip");
 
     $("#testmask")[0].focus();
     $("#testmask").Type("10.10.10.10");
     $("#testmask2")[0].focus();
-    equal($("#testmask").val(), "10.10.10.10", "Result " + $("#testmask").val());
+    setTimeout(function () {
+        start();
+        equal($("#testmask").val(), "10.10.10.10", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
-    $("#testmask2").remove();
+        $("#testmask").remove();
+        $("#testmask2").remove();
+    }, 0);
 });
 
-test("inputmask(\"ip\" - 1.1.1.1", function () {
+asyncTest("inputmask(\"ip\" - 1.1.1.1", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" />');
     $fixture.append('<input type="text" id="testmask2" />');
-    $("#testmask").inputmask("ip")
+    $("#testmask").inputmask("ip");
 
     $("#testmask")[0].focus();
     $("#testmask").Type("1.1.1.1");
     $("#testmask2")[0].focus();
-    equal($("#testmask").val(), "1.1.1.1", "Result " + $("#testmask").val());
+    setTimeout(function () {
+        start();
+        equal($("#testmask").val(), "1.1.1.1", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
-    $("#testmask2").remove();
+        $("#testmask").remove();
+        $("#testmask2").remove();
+    }, 0);
 });
 
-test("inputmask(\"ip\" - 255.255.255.255", function () {
+asyncTest("inputmask(\"ip\" - 255.255.255.255", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" />');
     $fixture.append('<input type="text" id="testmask2" />');
-    $("#testmask").inputmask("ip")
+    $("#testmask").inputmask("ip");
 
     $("#testmask")[0].focus();
     $("#testmask").Type("255.255.255.255");
-    $("#testmask2")[0].focus();
-    equal($("#testmask").val(), "255.255.255.255", "Result " + $("#testmask").val());
+    setTimeout(function () {
+        start();
+        $("#testmask2")[0].focus();
+        equal($("#testmask").val(), "255.255.255.255", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
-    $("#testmask2").remove();
+        $("#testmask").remove();
+        $("#testmask2").remove();
+    }, 0);
 });
 
-test("inputmask(\"ip\" - 192.168.1.100", function () {
+asyncTest("inputmask(\"ip\" - 192.168.1.100", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" />');
     $fixture.append('<input type="text" id="testmask2" />');
-    $("#testmask").inputmask("ip")
+    $("#testmask").inputmask("ip");
 
     $("#testmask")[0].focus();
     $("#testmask").Type("192.168.1.100");
     $("#testmask2")[0].focus();
-    equal($("#testmask").val(), "192.168.1.100", "Result " + $("#testmask").val());
+    setTimeout(function () {
+        start();
+        equal($("#testmask").val(), "192.168.1.100", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
-    $("#testmask2").remove();
+        $("#testmask").remove();
+        $("#testmask2").remove();
+    }, 0);
 });

+ 7 - 5
qunit/tests_multi.js

@@ -125,11 +125,13 @@ asyncTest("inputmask({ mask: [\"99999\", \"99999-9999\", \"999999-9999\"]]}) - i
     $("#testmask").inputmask({ mask: ["99999", "99999-9999", "999999-9999"] });
 
     $("#testmask")[0].focus();
-    $("#testmask").Type("123456");
-    setTimeout(function () {
-        equal($("#testmask").val(), "____-654321", "Result " + $("#testmask").val());
-        start();
-        $("#testmask").remove();
+    setTimeout(function () { //needed to pass on ie
+        $("#testmask").Type("123456");
+        setTimeout(function () {
+            start();
+            equal($("#testmask").val(), "____-654321", "Result " + $("#testmask").val());
+            $("#testmask").remove();
+        }, 0);
     }, 0);
 });
 

+ 2 - 1
qunit/tests_numeric.js

@@ -270,7 +270,8 @@ test("numeric alias with allowMinus:false type=number - mask not applied - Marti
     $("#testmask").Type("123456");
     $("#testmask").SendKey("-");
 
-    equal($("#testmask").val(), "", "Result " + $("#testmask").val());
+    //IE7 does not know type=number and treats as type=text
+    ok($("#testmask").val() == "" || $("#testmask").val() == "123456", "Result " + $("#testmask").val());
     $("#testmask").remove();
 });
 

+ 122 - 95
qunit/tests_numericinput.js

@@ -1,177 +1,198 @@
 module("Direction RTL");
-test("inputmask(\"999.999.999\") - delete 2nd with backspace, continue the mask", function () {
+asyncTest("inputmask(\"999.999.999\") - delete 2nd with backspace, continue the mask", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" dir="rtl" />');
     $("#testmask").inputmask("999.999.999");
 
     $("#testmask")[0].focus();
+    setTimeout(function () {
+        $("#testmask").SendKey("1");
+        $("#testmask").SendKey("2");
+        $("#testmask").SendKey("3");
+        $("#testmask").SendKey(keyCodes.RIGHT);
+        $("#testmask").SendKey(keyCodes.RIGHT);
+        $("#testmask").SendKey(keyCodes.RIGHT);
+        $("#testmask").SendKey(keyCodes.BACKSPACE);
+        $("#testmask").SendKey("4");
+        $("#testmask").SendKey(keyCodes.LEFT);
+        $("#testmask").SendKey("5");
+        $("#testmask").SendKey("6");
+        start();
+        equal($("#testmask").val(), "___._65.341", "Result " + $("#testmask").val());
 
-    $("#testmask").SendKey("1");
-    $("#testmask").SendKey("2");
-    $("#testmask").SendKey("3");
-    $("#testmask").SendKey(keyCodes.RIGHT);
-    $("#testmask").SendKey(keyCodes.RIGHT);
-    $("#testmask").SendKey(keyCodes.RIGHT);
-    $("#testmask").SendKey(keyCodes.BACKSPACE);
-    $("#testmask").SendKey("4");
-    $("#testmask").SendKey(keyCodes.LEFT);
-    $("#testmask").SendKey("5");
-    $("#testmask").SendKey("6");
-
-    equal($("#testmask").val(), "___._65.341", "Result " + $("#testmask").val());
-
-    $("#testmask").remove();
+        $("#testmask").remove();
+    }, 0);
 });
 
-test("inputmask(\"999.999.999\") - delete 2nd with delete, continue the mask", function () {
+asyncTest("inputmask(\"999.999.999\") - delete 2nd with delete, continue the mask", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" dir="rtl" />');
     $("#testmask").inputmask("999.999.999");
 
     $("#testmask")[0].focus();
+    setTimeout(function () {
+        $("#testmask").SendKey("1");
+        $("#testmask").SendKey("2");
+        $("#testmask").SendKey("3");
+        $("#testmask").SendKey(keyCodes.RIGHT);
+        $("#testmask").SendKey(keyCodes.RIGHT);
+        $("#testmask").SendKey(keyCodes.DELETE);
+        $("#testmask").SendKey("4");
+        $("#testmask").SendKey(keyCodes.LEFT);
+        $("#testmask").SendKey("5");
+        $("#testmask").SendKey("6");
+        start();
+        equal($("#testmask").val(), "___._65.341", "Result " + $("#testmask").val());
 
-    $("#testmask").SendKey("1");
-    $("#testmask").SendKey("2");
-    $("#testmask").SendKey("3");
-    $("#testmask").SendKey(keyCodes.RIGHT);
-    $("#testmask").SendKey(keyCodes.RIGHT);
-    $("#testmask").SendKey(keyCodes.DELETE);
-    $("#testmask").SendKey("4");
-    $("#testmask").SendKey(keyCodes.LEFT);
-    $("#testmask").SendKey("5");
-    $("#testmask").SendKey("6");
-
-    equal($("#testmask").val(), "___._65.341", "Result " + $("#testmask").val());
-
-    $("#testmask").remove();
+        $("#testmask").remove();
+    }, 0);
 });
 
-test("inputmask(\"999-aaa-999\")", function () {
+asyncTest("inputmask(\"999-aaa-999\")", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" dir="rtl" />');
     $("#testmask").inputmask("999-aaa-999");
 
     $("#testmask")[0].focus();
-    $("#testmask").Type("123abc12");
-
-    equal($("#testmask").val(), "_21-cba-321", "Result " + $("#testmask").val());
+    setTimeout(function () {
+        $("#testmask").Type("123abc12");
+        start();
+        equal($("#testmask").val(), "_21-cba-321", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+        $("#testmask").remove();
+    }, 0);
 });
 
-test("inputmask(\"999-999-999\") - replace selection", function () {
+asyncTest("inputmask(\"999-999-999\") - replace selection", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" dir="rtl" />');
     $("#testmask").inputmask("999-999-999");
 
     $("#testmask")[0].focus();
-    $("#testmask").Type("123456789");
-    caret($("#testmask"), 4, 7);
-    $("#testmask").Type("5");
-
-    equal($("#testmask").val(), "__9-875-321", "Result " + $("#testmask").val());
+    setTimeout(function () {
+        $("#testmask").Type("123456789");
+        caret($("#testmask"), 4, 7);
+        $("#testmask").Type("5");
+        start();
+        equal($("#testmask").val(), "__9-875-321", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+        $("#testmask").remove();
+    }, 0);
 });
 
-test("inputmask(\"999-999-999\") - replace selection with backspace", function () {
+asyncTest("inputmask(\"999-999-999\") - replace selection with backspace", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" dir="rtl" />');
     $("#testmask").inputmask("999-999-999");
 
     $("#testmask")[0].focus();
-    $("#testmask").Type("123456789");
-    caret($("#testmask"), 4, 7);
-    $("#testmask").SendKey(keyCodes.BACKSPACE);
-    $("#testmask").Type("5");
-
-    equal($("#testmask").val(), "__9-875-321", "Result " + $("#testmask").val());
+    setTimeout(function () {
+        $("#testmask").Type("123456789");
+        caret($("#testmask"), 4, 7);
+        $("#testmask").SendKey(keyCodes.BACKSPACE);
+        $("#testmask").Type("5");
+        start();
+        equal($("#testmask").val(), "__9-875-321", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+        $("#testmask").remove();
+    }, 0);
 });
 
-test("inputmask(\"999-999-999\") - replace selection - with delete", function () {
+asyncTest("inputmask(\"999-999-999\") - replace selection - with delete", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" dir="rtl" />');
     $("#testmask").inputmask("999-999-999");
 
     $("#testmask")[0].focus();
-    $("#testmask").Type("123456789");
-    caret($("#testmask"), 4, 7);
-    $("#testmask").SendKey(keyCodes.DELETE);
-    $("#testmask").Type("5");
-
-    equal($("#testmask").val(), "__9-875-321", "Result " + $("#testmask").val());
+    setTimeout(function () {
+        $("#testmask").Type("123456789");
+        caret($("#testmask"), 4, 7);
+        $("#testmask").SendKey(keyCodes.DELETE);
+        $("#testmask").Type("5");
+        start();
+        equal($("#testmask").val(), "__9-875-321", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+        $("#testmask").remove();
+    }, 0);
 });
 
 module("Numeric Input");
-test("inputmask({ mask: \"9\", numericInput: true, repeat: 10, greedy: true }); - 1234567890", function () {
+asyncTest("inputmask({ mask: \"9\", numericInput: true, repeat: 10, greedy: true }); - 1234567890", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" />');
     $("#testmask").inputmask({ mask: "9", numericInput: true, repeat: 10, greedy: true });
 
     $("#testmask")[0].focus();
-    $("#testmask").Type("1234567890");
-
-    equal($("#testmask").val(), "1234567890", "Result " + $("#testmask").val());
+    setTimeout(function () {
+        $("#testmask").Type("1234567890");
+        start();
+        equal($("#testmask").val(), "1234567890", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+        $("#testmask").remove();
+    }, 0);
 });
-test("inputmask({ mask: \"9\", numericInput: true, repeat: 10, greedy: true }); - replace selection", function () {
+asyncTest("inputmask({ mask: \"9\", numericInput: true, repeat: 10, greedy: true }); - replace selection", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" />');
     $("#testmask").inputmask({ mask: "9", numericInput: true, repeat: 10, greedy: true });
 
     $("#testmask")[0].focus();
-    $("#testmask").Type("1234567890");
-    caret($("#testmask"), 3, 6);
-    $("#testmask").Type("5");
-
-    equal($("#testmask").val(), "__12357890", "Result " + $("#testmask").val());
+    setTimeout(function () {
+        $("#testmask").Type("1234567890");
+        caret($("#testmask"), 3, 6);
+        $("#testmask").Type("5");
+        start();
+        equal($("#testmask").val(), "__12357890", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+        $("#testmask").remove();
+    }, 0);
 });
 
-test("inputmask({ mask: \"99-99-99\", numericInput: true }); - 1234567890", function () {
+asyncTest("inputmask({ mask: \"99-99-99\", numericInput: true }); - 1234567890", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" />');
     $("#testmask").inputmask({ mask: "99-99-99", numericInput: true });
 
     $("#testmask")[0].focus();
-    $("#testmask").Type("1234567890");
-
-    equal($("#testmask").val(), "12-34-56", "Result " + $("#testmask").val());
+    setTimeout(function () {
+        $("#testmask").Type("1234567890");
+        start();
+        equal($("#testmask").val(), "12-34-56", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+        $("#testmask").remove();
+    }, 0);
 });
 
-test("inputmask({ mask: \"€ 999.999.999,99\", numericInput: true }); - 123", function () {
+asyncTest("inputmask({ mask: \"€ 999.999.999,99\", numericInput: true }); - 123", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" />');
     $("#testmask").inputmask('€ 999.999.999,99', { numericInput: true });
 
     $("#testmask")[0].focus();
-    $("#testmask").Type("123");
-
-    equal($("#testmask").val(), "€ ___.___.__1,23", "Result " + $("#testmask").val());
+    setTimeout(function () {
+        $("#testmask").Type("123");
+        start();
+        equal($("#testmask").val(), "€ ___.___.__1,23", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+        $("#testmask").remove();
+    }, 0);
 });
 
-test("inputmask({ mask: \"€ 999.999.999,99\", numericInput: true }); - 123 position before 456", function () {
+asyncTest("inputmask({ mask: \"€ 999.999.999,99\", numericInput: true }); - 123 position before 456", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" />');
     $("#testmask").inputmask('€ 999.999.999,99', { numericInput: true });
 
     $("#testmask")[0].focus();
-    $("#testmask").Type("123");
-    caret($("#testmask"), 12);
-    $("#testmask").Type("456");
-    equal($("#testmask").val(), "€ ___.__4.561,23", "Result " + $("#testmask").val());
+    setTimeout(function () {
+        $("#testmask").Type("123");
+        caret($("#testmask"), 12);
+        $("#testmask").Type("456");
+        start();
+        equal($("#testmask").val(), "€ ___.__4.561,23", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+        $("#testmask").remove();
+    }, 0);
 });
 
 asyncTest("inputmask({ mask: \"€ 999.999.999,99\", { numericInput: true, radixPoint: \",\" }); - 123 - radixpoint has no logic anymore in base", function () {
@@ -206,30 +227,36 @@ asyncTest("inputmask({ mask: \"€ 999.999.999,99\", { numericInput: true, radix
     }, 0);
 });
 
-test("inputmask({ mask: \"9999 t\", { numericInput: true }); - 123 - Joe Rosa", function () {
+asyncTest("inputmask({ mask: \"9999 t\", { numericInput: true }); - 123 - Joe Rosa", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" />');
     $("#testmask").inputmask('9999 t', { numericInput: true });
 
     $("#testmask").focus();
     $("#testmask").click();
-    $("#testmask").Type("123");
-    equal($("#testmask").val(), "_123 t", "Result " + $("#testmask").val());
+    setTimeout(function () {
+        $("#testmask").Type("123");
+        start();
+        equal($("#testmask").val(), "_123 t", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+        $("#testmask").remove();
+    }, 0);
 });
 
-test("inputmask({ mask: \"9999 t\", { numericInput: true, autoUnmask: true }); - 70  - Joe Rosa", function () {
+asyncTest("inputmask({ mask: \"9999 t\", { numericInput: true, autoUnmask: true }); - 70  - Joe Rosa", function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" />');
     $("#testmask").inputmask('9999 t', { numericInput: true, autoUnmask: true });
 
     $("#testmask").focus();
     $("#testmask").click();
-    $("#testmask").Type("70");
-    equal($("#testmask").val(), "70", "Result " + $("#testmask").val());
+    setTimeout(function () {
+        $("#testmask").Type("70");
+        start();
+        equal($("#testmask").val(), "70", "Result " + $("#testmask").val());
 
-    $("#testmask").remove();
+        $("#testmask").remove();
+    }, 0);
 });
 
 asyncTest("inputmask({ mask: \"['$9.99', '$99.99', '$999.99', '$9,999.99', '$99,999.99', '$999,999.99', '$9,999,999.99', '$99,999,999.99', '$999,999,999.99'], 'placeholder': ' ', 'numericInput': true, 'rightAlignNumerics': false\" value=\"$100000.00\"", function () {

+ 3 - 2
qunit/tests_phone.js

@@ -3,8 +3,9 @@ module("Phone masks")
 asyncTest("inputmask(\"phone be\") - type \"473890428\"", 1, function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" />');
+    
     $("#testmask").inputmask("phonebe", { "url": "https://rawgit.com/RobinHerbots/jquery.inputmask/3.x/js/phone-codes/phone-be.json" });
-
+    $("#testmask")[0].focus();
     $("#testmask").Type("473890428");
 
     setTimeout(function () {
@@ -18,7 +19,7 @@ asyncTest("inputmask(\"phone be\") - value \"32473890428\"", 1, function () {
     var $fixture = $("#qunit-fixture");
     $fixture.append('<input type="text" id="testmask" value="32473890428" />');
     $("#testmask").inputmask("phonebe", { "url": "https://rawgit.com/RobinHerbots/jquery.inputmask/3.x/js/phone-codes/phone-be.json" });
-
+    $("#testmask")[0].focus();
     setTimeout(function () {
         equal($("#testmask").val(), "+32(473)89-04-28", "Result " + $("#testmask").val());
         start();