Browse Source

Bug when typing after a fixed character fix #1299

Robin Herbots 9 years ago
parent
commit
441e91ac8f

+ 1 - 0
CHANGELOG.md

@@ -12,6 +12,7 @@ All notable changes to this project will be documented in this file.
 	- getmasklength
 
 ### Fixed
+- Bug when typing after a fixed character #1299
 - onUnMask is not being called #1291
 - How Can I have caret position on decimal digit(after decimal point) for currency inputmask ? #1282
 - How to implement mask for these numbers? #840 (alternator)

+ 1 - 1
bower.json

@@ -1,6 +1,6 @@
 {
   "name": "jquery.inputmask",
-  "version": "3.3.2-9",
+  "version": "3.3.2-11",
   "main": [
     "./dist/inputmask/inputmask.js"
   ],

+ 1 - 1
component.json

@@ -2,7 +2,7 @@
   "name": "jquery_inputmask",
   "repository": "robinherbots/jquery.inputmask",
   "description": "jquery.inputmask is a jquery plugin which create an input mask.",
-  "version": "3.3.2-9",
+  "version": "3.3.2-11",
   "keywords": ["jquery", "plugins", "input", "form", "inputmask", "mask"],
   "main": "./dist/jquery.inputmask.bundle.js",
   "scripts": [

+ 1 - 1
composer.json

@@ -1,7 +1,7 @@
 {
   "name": "robinherbots/jquery.inputmask",
   "description": "jquery.inputmask is a jquery plugin which create an input mask.",
-  "version": "3.3.2-9",
+  "version": "3.3.2-11",
   "type": "library",
   "keywords": ["jquery", "plugins", "input", "form", "inputmask", "mask"],
   "homepage": "http://robinherbots.github.io/jquery.inputmask",

+ 1 - 1
dist/inputmask/inputmask.date.extensions.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.3.2-9
+* Version: 3.3.2-11
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "inputmask.dependencyLib", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("./inputmask.dependencyLib.jquery"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);

+ 1 - 1
dist/inputmask/inputmask.dependencyLib.jquery.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.3.2-9
+* Version: 3.3.2-11
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery")) : factory(jQuery);

+ 1 - 1
dist/inputmask/inputmask.extensions.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.3.2-9
+* Version: 3.3.2-11
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "inputmask.dependencyLib", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("./inputmask.dependencyLib.jquery"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);

File diff suppressed because it is too large
+ 25 - 20
dist/inputmask/inputmask.js


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

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.3.2-9
+* Version: 3.3.2-11
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "inputmask.dependencyLib", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("./inputmask.dependencyLib.jquery"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);

+ 1 - 1
dist/inputmask/inputmask.phone.extensions.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.3.2-9
+* Version: 3.3.2-11
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);

+ 1 - 1
dist/inputmask/inputmask.regex.extensions.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.3.2-9
+* Version: 3.3.2-11
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "inputmask.dependencyLib", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("./inputmask.dependencyLib.jquery"), require("./inputmask")) : factory(window.dependencyLib || jQuery, window.Inputmask);

+ 1 - 1
dist/inputmask/jquery.inputmask.js

@@ -3,7 +3,7 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.3.2-9
+* Version: 3.3.2-11
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "jquery", "inputmask" ], factory) : "object" == typeof exports ? module.exports = factory(require("jquery"), require("./inputmask")) : factory(jQuery, window.Inputmask);

File diff suppressed because it is too large
+ 25 - 20
dist/jquery.inputmask.bundle.js


File diff suppressed because it is too large
+ 1 - 1
dist/min/inputmask/inputmask.date.extensions.min.js


+ 1 - 1
dist/min/inputmask/inputmask.dependencyLib.jquery.min.js

@@ -3,6 +3,6 @@
 * https://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2016 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.3.2-9
+* Version: 3.3.2-11
 */
 !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return window.dependencyLib=a,a});

File diff suppressed because it is too large
+ 1 - 1
dist/min/inputmask/inputmask.extensions.min.js


File diff suppressed because it is too large
+ 3 - 3
dist/min/inputmask/inputmask.min.js


File diff suppressed because it is too large
+ 1 - 1
dist/min/inputmask/inputmask.numeric.extensions.min.js


File diff suppressed because it is too large
+ 1 - 1
dist/min/inputmask/inputmask.phone.extensions.min.js


File diff suppressed because it is too large
+ 1 - 1
dist/min/inputmask/inputmask.regex.extensions.min.js


File diff suppressed because it is too large
+ 1 - 1
dist/min/inputmask/jquery.inputmask.min.js


File diff suppressed because it is too large
+ 4 - 4
dist/min/jquery.inputmask.bundle.min.js


+ 53 - 46
js/inputmask.js

@@ -915,33 +915,35 @@
 			resetMaskSet(true);
 		}
 
-		function getTestTemplate(pos, ndxIntlzr, tstPs) {
-			var testPos = getMaskSet().validPositions[pos];
-			if (testPos === undefined) {
-				var testPositions = getTests(pos, ndxIntlzr ? ndxIntlzr.slice() : ndxIntlzr, tstPs),
-					lvp = getLastValidPosition(),
-					lvTest = getMaskSet().validPositions[lvp] || getTests(0)[0],
-					lvTestAltArr = (lvTest.alternation !== undefined) ? lvTest.locator[lvTest.alternation].toString().split(",") : [];
-				for (var ndx = 0; ndx < testPositions.length; ndx++) {
-					testPos = testPositions[ndx];
-
-					if (testPos.match &&
-						(((opts.greedy && testPos.match.optionalQuantifier !== true) || (testPos.match.optionality === false || testPos.match.newBlockMarker === false) && testPos.match.optionalQuantifier !== true) &&
-						((lvTest.alternation === undefined || lvTest.alternation !== testPos.alternation) ||
-						(testPos.locator[lvTest.alternation] !== undefined && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAltArr))))) {
-						break;
-					}
+		function determineTestTemplate(tests, ignoreGreedy) {
+			var testPos;
+			var testPositions = tests,
+				lvp = getLastValidPosition(),
+				lvTest = getMaskSet().validPositions[lvp] || getTests(0)[0],
+				lvTestAltArr = (lvTest.alternation !== undefined) ? lvTest.locator[lvTest.alternation].toString().split(",") : [];
+			for (var ndx = 0; ndx < testPositions.length; ndx++) {
+				testPos = testPositions[ndx];
+
+				if (testPos.match &&
+					((((opts.greedy || ignoreGreedy) && testPos.match.optionalQuantifier !== true) || (testPos.match.optionality === false || testPos.match.newBlockMarker === false) && testPos.match.optionalQuantifier !== true) &&
+					((lvTest.alternation === undefined || lvTest.alternation !== testPos.alternation) ||
+					(testPos.locator[lvTest.alternation] !== undefined && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAltArr))))) {
+					break;
 				}
 			}
 
 			return testPos;
 		}
 
+		function getTestTemplate(pos, ndxIntlzr, tstPs) {
+			return getMaskSet().validPositions[pos] || determineTestTemplate(getTests(pos, ndxIntlzr ? ndxIntlzr.slice() : ndxIntlzr, tstPs));
+		}
+
 		function getTest(pos) {
 			if (getMaskSet().validPositions[pos]) {
-				return getMaskSet().validPositions[pos].match;
+				return getMaskSet().validPositions[pos];
 			}
-			return getTests(pos)[0].match;
+			return getTests(pos)[0];
 		}
 
 		function positionCanMatchDefinition(pos, def) {
@@ -1167,23 +1169,25 @@
 			function mergeLocators(tests) {
 				var locator = [];
 				if (!$.isArray(tests)) tests = [tests];
-
-				if (tests[0].alternation === undefined) {
-					locator = tests[0].locator.slice();
-				}
-				else {
-					$.each(tests, function (ndx, tst) {
-						if (tst.def !== "") {
-							if (locator.length === 0) locator = tst.locator.slice();
-							else {
-								for (var i = 0; i < locator.length; i++) {
-									if (tst.locator[i] && locator[i].toString().indexOf(tst.locator[i]) === -1) {
-										locator[i] += "," + tst.locator[i];
+				if (tests.length > 0) {
+					if (tests[0].alternation === undefined) {
+						locator = determineTestTemplate(tests.slice()).locator.slice();
+						if (locator.length === 0) locator = tests[0].locator.slice();
+					}
+					else {
+						$.each(tests, function (ndx, tst) {
+							if (tst.def !== "") {
+								if (locator.length === 0) locator = tst.locator.slice();
+								else {
+									for (var i = 0; i < locator.length; i++) {
+										if (tst.locator[i] && locator[i].toString().indexOf(tst.locator[i]) === -1) {
+											locator[i] += "," + tst.locator[i];
+										}
 									}
 								}
 							}
-						}
-					});
+						});
+					}
 				}
 				return locator;
 			}
@@ -1601,12 +1605,11 @@
 			for (pndx++; pndx < maskPos; pndx++) {
 				if (getMaskSet().validPositions[pndx] === undefined &&
 					(opts.jitMasking === false || opts.jitMasking > pndx) &&
-					((testTemplate = getTestTemplate(pndx)).match.def === opts.radixPointDefinitionSymbol || !isMask(pndx, true) ||
+					((testTemplate = getTestTemplate(pndx, getTestTemplate(pndx - 1).locator, pndx - 1)).match.def === opts.radixPointDefinitionSymbol || !isMask(pndx, true) ||
 					($.inArray(opts.radixPoint, getBuffer()) < pndx && testTemplate.match.fn && testTemplate.match.fn.test(getPlaceholder(pndx), getMaskSet(), pndx, false, opts)))) {
-					generatedPos = getLastValidPosition(pndx, true) + 1;
-					result = _isValid(generatedPos, testTemplate.match.placeholder || (testTemplate.match.fn == null ? testTemplate.match.def : (getPlaceholder(pndx) !== "" ? getPlaceholder(pndx) : getBuffer()[pndx])), true, fromSetValid);
+					result = _isValid(pndx, testTemplate.match.placeholder || (testTemplate.match.fn == null ? testTemplate.match.def : (getPlaceholder(pndx) !== "" ? getPlaceholder(pndx) : getBuffer()[pndx])), true, fromSetValid);
 					if (result !== false) {
-						getMaskSet().validPositions[result.pos || generatedPos].generatedInput = true;
+						getMaskSet().validPositions[result.pos || pndx].generatedInput = true;
 					}
 				}
 			}
@@ -1626,9 +1629,13 @@
 							"caret": seekNext(maskPos)
 						};
 					} else if ((opts.insertMode || getMaskSet().validPositions[seekNext(maskPos)] === undefined) && !isMask(maskPos, true)) { //does the input match on a further position?
-						var staticChar = getTestTemplate(maskPos).match;
-						staticChar = staticChar.placeholder || staticChar.def;
-						_isValid(maskPos, staticChar, strict, fromSetValid);
+						var testsFromPos = getTests(maskPos);
+						if (testsFromPos[testsFromPos.length - 1].match.def === "") testsFromPos.pop();
+						var staticChar = determineTestTemplate(testsFromPos, true);
+						if (staticChar) {
+							staticChar = staticChar.match.placeholder || staticChar.match.def;
+							_isValid(maskPos, staticChar, strict, fromSetValid);
+						}
 						for (var nPos = maskPos + 1, snPos = seekNext(maskPos); nPos <= snPos; nPos++) {
 							result = _isValid(nPos, c, strict, fromSetValid);
 							if (result !== false) {
@@ -1668,8 +1675,8 @@
 			var test;
 			if (strict) {
 				test = getTestTemplate(pos).match;
-				if (test.def === "") test = getTest(pos);
-			} else test = getTest(pos);
+				if (test.def === "") test = getTest(pos).match;
+			} else test = getTest(pos).match;
 
 			if (test.fn != null) {
 				return test.fn;
@@ -1684,7 +1691,7 @@
 			var maskL = getMaskSet().maskLength;
 			if (pos >= maskL) return maskL;
 			var position = pos;
-			while (++position < maskL && ((newBlock === true && (getTest(position).newBlockMarker !== true || !isMask(position))) || (newBlock !== true && !isMask(position) && (opts.nojumps !== true || opts.nojumpsThreshold > position)))) {
+			while (++position < maskL && ((newBlock === true && (getTest(position).match.newBlockMarker !== true || !isMask(position))) || (newBlock !== true && !isMask(position) && (opts.nojumps !== true || opts.nojumpsThreshold > position)))) {
 			}
 			return position;
 		}
@@ -1693,7 +1700,7 @@
 			var position = pos;
 			if (position <= 0) return 0;
 
-			while (--position > 0 && ((newBlock === true && getTest(position).newBlockMarker !== true) || (newBlock !== true && !isMask(position)))) {
+			while (--position > 0 && ((newBlock === true && getTest(position).match.newBlockMarker !== true) || (newBlock !== true && !isMask(position)))) {
 			}
 
 			return position;
@@ -1727,7 +1734,7 @@
 		}
 
 		function getPlaceholder(pos, test) {
-			test = test || getTest(pos);
+			test = test || getTest(pos).match;
 			if (test.placeholder !== undefined) {
 				return test.placeholder;
 			} else if (test.fn === null) {
@@ -2294,7 +2301,7 @@
 				caret(input, !opts.insertMode && pos.begin === getMaskSet().maskLength ? pos.begin - 1 : pos.begin);
 			} else if (opts.tabThrough === true && k === Inputmask.keyCode.TAB) {
 				if (e.shiftKey === true) {
-					if (getTest(pos.begin).fn === null) {
+					if (getTest(pos.begin).match.fn === null) {
 						pos.begin = seekNext(pos.begin);
 					}
 					pos.end = seekPrevious(pos.begin, true);
@@ -2577,7 +2584,7 @@
 									caret(input, !isMask(clickPosition) && !isMask(clickPosition - 1) ? seekNext(clickPosition) : clickPosition);
 								} else {
 									var placeholder = getPlaceholder(lastPosition);
-									if ((placeholder !== "" && getBuffer()[lastPosition] !== placeholder) || (!isMask(lastPosition, true) && getTest(lastPosition).def === placeholder)) {
+									if ((placeholder !== "" && getBuffer()[lastPosition] !== placeholder) || (!isMask(lastPosition, true) && getTest(lastPosition).match.def === placeholder)) {
 										lastPosition = seekNext(lastPosition);
 									}
 									caret(input, lastPosition);

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "jquery.inputmask",
-  "version": "3.3.2-9",
+  "version": "3.3.2-11",
   "description": "jquery.inputmask is a jquery plugin which create an input mask.",
   "main": "./dist/inputmask/jquery.inputmask.js",
   "files": [

+ 2 - 2
qunit/config.js

@@ -7,7 +7,7 @@ require.config({
 		"inputmask.dependencyLib": "../dist/inputmask/inputmask.dependencyLib.jquery",
 		//"inputmask.dependencyLib": "../extra/dependencyLibs/inputmask.dependencyLib",
 		// "inputmask.dependencyLib": "../extra/dependencyLibs/inputmask.dependencyLib.jqlite",
-		"inputmask": "../dist/inputmask/inputmask"
-		//"inputmask": "../js/inputmask"
+		//"inputmask": "../dist/inputmask/inputmask"
+		"inputmask": "../js/inputmask"
 	}
 });

+ 58 - 45
qunit/tests_base.js

@@ -5,10 +5,10 @@ define([
 	"../dist/inputmask/inputmask.extensions",
 	"prototypeExtensions",
 	"simulator"
-], function(qunit, $, Inputmask) {
+], function (qunit, $, Inputmask) {
 	qunit.module("Simple masking");
 
-	qunit.test("inputmask(\"99-99-99\", { clearMaskOnLostFocus: false}", function(assert) {
+	qunit.test("inputmask(\"99-99-99\", { clearMaskOnLostFocus: false}", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -21,7 +21,7 @@ define([
 		assert.equal(testmask.inputmask._valueGet(), "__-__-__", "Result " + testmask.inputmask._valueGet());
 	});
 
-	qunit.test("inputmask(\"99-99-99\", { clearMaskOnLostFocus: true}", function(assert) {
+	qunit.test("inputmask(\"99-99-99\", { clearMaskOnLostFocus: true}", function (assert) {
 		var done = assert.async(),
 			$fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
@@ -32,13 +32,13 @@ define([
 			clearMaskOnLostFocus: false
 		}).mask(testmask);
 		testmask.blur();
-		setTimeout(function() {
+		setTimeout(function () {
 			assert.equal(testmask.value, "", "Result " + testmask.value);
 			done();
 		}, 0);
 	});
 
-	qunit.test("inputmask(\"999.999.999\")", function(assert) {
+	qunit.test("inputmask(\"999.999.999\")", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -51,7 +51,7 @@ define([
 		assert.equal(testmask.value, "123.___.___", "Result " + testmask.value);
 	});
 
-	qunit.test("inputmask(\"999.999.999\") + backspace", function(assert) {
+	qunit.test("inputmask(\"999.999.999\") + backspace", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -64,13 +64,13 @@ define([
 		assert.equal(testmask.value, "12_.___.___", "Result " + testmask.value);
 	});
 
-	qunit.test("inputmask(\"999.999.999\", { oncomplete: ... })", function(assert) {
+	qunit.test("inputmask(\"999.999.999\", { oncomplete: ... })", function (assert) {
 		var done = assert.async(),
 			$fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
 		Inputmask("999.999.999", {
-			oncomplete: function() {
+			oncomplete: function () {
 				assert.equal(testmask.value, "123.456.789", "Result " + testmask.value);
 				testmask.inputmask.remove();
 				done();
@@ -81,13 +81,13 @@ define([
 		$("#testmask").Type("123456789");
 	});
 
-	qunit.test("inputmask(\"9-AAA.999\") - change event", function(assert) {
+	qunit.test("inputmask(\"9-AAA.999\") - change event", function (assert) {
 		var done = assert.async(),
 			$fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
 
-		$("#testmask").on("change", function() {
+		$("#testmask").on("change", function () {
 			assert.ok(true, "Change triggered");
 			done();
 		});
@@ -95,19 +95,19 @@ define([
 		Inputmask("9-AAA.999").mask(testmask);
 
 		testmask.focus();
-		setTimeout(function() {
+		setTimeout(function () {
 			$("#testmask").Type("1abc12");
 			testmask.blur();
 		}, 0);
 	});
 
-	qunit.test("inputmask(\"9-AAA.999\", { onincomplete: ... })", function(assert) {
+	qunit.test("inputmask(\"9-AAA.999\", { onincomplete: ... })", function (assert) {
 		var done = assert.async(),
 			$fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
 		Inputmask("9-AAA.999", {
-			onincomplete: function() {
+			onincomplete: function () {
 				assert.equal(testmask.value, "1-ABC.12_", "Result " + testmask.value);
 				testmask.inputmask.remove();
 				done();
@@ -115,13 +115,13 @@ define([
 		}).mask(testmask);
 
 		testmask.focus();
-		setTimeout(function() {
+		setTimeout(function () {
 			$("#testmask").Type("1abc12");
 			testmask.blur();
 		}, 0);
 	});
 
-	qunit.test("inputmask(\"999.999.999\") - delete 2nd with backspace, continue the mask", function(assert) {
+	qunit.test("inputmask(\"999.999.999\") - delete 2nd with backspace, continue the mask", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -140,7 +140,7 @@ define([
 		assert.equal(testmask.value, "143.56_.___", "Result " + testmask.value);
 	});
 
-	qunit.test("inputmask(\"999.999.999\") - delete 2nd with delete, continue the mask", function(assert) {
+	qunit.test("inputmask(\"999.999.999\") - delete 2nd with delete, continue the mask", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -163,7 +163,7 @@ define([
 		assert.equal(testmask.value, "143.56_.___", "Result " + testmask.value);
 	});
 
-	qunit.test("inputmask(\"999.999.999\") - delete selection start with nomask", function(assert) {
+	qunit.test("inputmask(\"999.999.999\") - delete selection start with nomask", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -178,7 +178,7 @@ define([
 		assert.equal(testmask.value, "123.789.___", "Result " + testmask.value);
 	});
 
-	qunit.test("inputmask(\"999.999.999\") - backspace selection start with nomask", function(assert) {
+	qunit.test("inputmask(\"999.999.999\") - backspace selection start with nomask", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -193,7 +193,7 @@ define([
 		assert.equal(testmask.value, "123.789.___", "Result " + testmask.value);
 	});
 
-	qunit.test("inputmask(\"999.999.999\") - overtype selection start with nomask", function(assert) {
+	qunit.test("inputmask(\"999.999.999\") - overtype selection start with nomask", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -208,7 +208,7 @@ define([
 		assert.equal(testmask.value, "123.178.9__", "Result " + testmask.value);
 	});
 
-	qunit.test("inputmask(\"*****\")", function(assert) {
+	qunit.test("inputmask(\"*****\")", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -223,7 +223,7 @@ define([
 		assert.equal(testmask.value, "abcde", "Result " + testmask.value);
 	});
 
-	qunit.test("inputmask(\"d/m/y\")", function(assert) {
+	qunit.test("inputmask(\"d/m/y\")", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -238,7 +238,7 @@ define([
 		assert.equal(testmask.value, "23/0_/1973", "Result " + testmask.value);
 	});
 
-	qunit.test("inputmask(\"(999)999-9999\") - ruslanfedoseenko mask", function(assert) {
+	qunit.test("inputmask(\"(999)999-9999\") - ruslanfedoseenko mask", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -251,7 +251,7 @@ define([
 		$("#testmask").Type("7");
 		assert.equal(testmask.value, "(999)999-9999", "Result " + testmask.value);
 	});
-	qunit.test("inputmask(\"(999)999-9999\") - insert false - ruslanfedoseenko mask", function(assert) {
+	qunit.test("inputmask(\"(999)999-9999\") - insert false - ruslanfedoseenko mask", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -267,7 +267,7 @@ define([
 		assert.equal(testmask.value, "(999)999-9999", "Result " + testmask.value);
 	});
 
-	qunit.test("inputmask(\"\") - empty mask - andywolk", function(assert) {
+	qunit.test("inputmask(\"\") - empty mask - andywolk", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -279,7 +279,7 @@ define([
 	});
 
 
-	qunit.test("Intergroup selection - dhilt", function(assert) {
+	qunit.test("Intergroup selection - dhilt", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -292,7 +292,7 @@ define([
 		$("#testmask").SendKey("6");
 		assert.equal(testmask.value, "23/03/2014", "Result " + testmask.value);
 	});
-	qunit.test("Intergroup selection - dhilt", function(assert) {
+	qunit.test("Intergroup selection - dhilt", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -306,7 +306,7 @@ define([
 		assert.equal(testmask.value, "23/06/y014", "Result " + testmask.value);
 	});
 
-	qunit.test("Delete selection with non-masks", function(assert) {
+	qunit.test("Delete selection with non-masks", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -320,7 +320,7 @@ define([
 		assert.equal(testmask.value, "(999)999-99__", "Result " + testmask.value);
 	});
 
-	qunit.test("Selection and backspace also deletes previous - kenaku", function(assert) {
+	qunit.test("Selection and backspace also deletes previous - kenaku", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -336,7 +336,7 @@ define([
 
 
 	qunit.module("Non-greedy masks");
-	qunit.test("inputmask(\"*\", { greedy: false, repeat: \"*\" }) - replace cd with 1", function(assert) {
+	qunit.test("inputmask(\"*\", { greedy: false, repeat: \"*\" }) - replace cd with 1", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -353,7 +353,7 @@ define([
 		assert.equal(testmask.value, "ab1ef", "Result " + testmask.value);
 	});
 
-	qunit.test("inputmask(\"*\", { greedy: false, repeat: \"*\" }) - type abcdef", function(assert) {
+	qunit.test("inputmask(\"*\", { greedy: false, repeat: \"*\" }) - type abcdef", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -369,7 +369,7 @@ define([
 		assert.equal(testmask.value, "abcdef", "Result " + testmask.value);
 	});
 
-	qunit.test("inputmask(\"A.\", { repeat: \"*\" }) - type abc - joostburg", function(assert) {
+	qunit.test("inputmask(\"A.\", { repeat: \"*\" }) - type abc - joostburg", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -384,7 +384,7 @@ define([
 		assert.equal(testmask.value, "A.B.C", "Result " + testmask.value);
 	});
 
-	qunit.test("{ mask: \"A\", placeholder: \"\", repeat: 16 }) - type testtest - glosswordteam", function(assert) {
+	qunit.test("{ mask: \"A\", placeholder: \"\", repeat: 16 }) - type testtest - glosswordteam", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -401,7 +401,7 @@ define([
 		assert.equal(testmask.value, "TESTTEST", "Result " + testmask.value);
 	});
 
-	qunit.test("{ mask: \"A\", repeat: 16, greedy: false }) - type testtest - glosswordteam", function(assert) {
+	qunit.test("{ mask: \"A\", repeat: 16, greedy: false }) - type testtest - glosswordteam", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -419,7 +419,7 @@ define([
 	});
 
 	qunit.module("greedy masks");
-	qunit.test("inputmask(\"*\", { greedy: true, repeat: 10, clearMaskOnLostFocus: false  })", function(assert) {
+	qunit.test("inputmask(\"*\", { greedy: true, repeat: 10, clearMaskOnLostFocus: false  })", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -432,7 +432,7 @@ define([
 		testmask.focus();
 		assert.equal($("#testmask")[0].inputmask._valueGet(), "__________", "Result " + $("#testmask")[0].inputmask._valueGet());
 	});
-	qunit.test("inputmask(\"*\", { greedy: true, repeat: 10 }) - type 12345678901234567890", function(assert) {
+	qunit.test("inputmask(\"*\", { greedy: true, repeat: 10 }) - type 12345678901234567890", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -448,7 +448,7 @@ define([
 		assert.equal(testmask.value, "1234567890", "Result " + testmask.value);
 	});
 
-	qunit.test("inputmask(\"9,99\", { greedy: true, repeat: 5 }) - type 12345678901234567890", function(assert) {
+	qunit.test("inputmask(\"9,99\", { greedy: true, repeat: 5 }) - type 12345678901234567890", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -464,7 +464,7 @@ define([
 		assert.equal(testmask.value, "1,234,567,890,123,45", "Result " + testmask.value);
 	});
 
-	qunit.test("inputmask({ mask: \"9\", repeat: 10, placeholder: \"\", numericInput: true }) - greedy true with empty placeholder - type 12345", function(assert) {
+	qunit.test("inputmask({ mask: \"9\", repeat: 10, placeholder: \"\", numericInput: true }) - greedy true with empty placeholder - type 12345", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -482,13 +482,13 @@ define([
 		assert.equal(testmask.value, "12345", "Result " + testmask.value);
 	});
 
-	qunit.test("creditcard switch - pchelailya", function(assert) {
+	qunit.test("creditcard switch - pchelailya", function (assert) {
 		var done = assert.async(),
 			$fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
 		Inputmask("9999 9999 9999 9999").mask(testmask);
-		$("#testmask").on("keyup", function(event) {
+		$("#testmask").on("keyup", function (event) {
 			var value = this.inputmask.unmaskedvalue();
 
 			if (value != null && value.length === 2 && value === "37") {
@@ -497,14 +497,14 @@ define([
 		});
 		testmask.focus();
 		$("#testmask").Type("37");
-		setTimeout(function() {
+		setTimeout(function () {
 			$("#testmask").Type("12");
 			assert.equal(testmask.value, "3712 ______ _____", "Result " + testmask.value);
 			done();
 		}, 0);
 	});
 
-	qunit.test("maskscache - same mask diff definitions - StonesEditeurs", function(assert) {
+	qunit.test("maskscache - same mask diff definitions - StonesEditeurs", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -512,7 +512,7 @@ define([
 			mask: "Z{1,*}",
 			definitions: {
 				'Z': {
-					validator: function(chrs, buffer, pos, strict, opts) {
+					validator: function (chrs, buffer, pos, strict, opts) {
 						return {
 							pos: pos,
 							c: 'A'
@@ -526,7 +526,7 @@ define([
 			mask: "Z{1,*}", // <= Same mask
 			definitions: {
 				'Z': {
-					validator: function(chrs, buffer, pos, strict, opts) {
+					validator: function (chrs, buffer, pos, strict, opts) {
 						return {
 							pos: pos,
 							c: 'B'
@@ -540,7 +540,7 @@ define([
 		assert.equal(document.getElementById("testmask").inputmask._valueGet(), "BBBBBB", "Result " + document.getElementById("testmask").inputmask._valueGet());
 	});
 
-	qunit.test("autoUnmask not work in newest release #1109 - danilG", function(assert) {
+	qunit.test("autoUnmask not work in newest release #1109 - danilG", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -558,7 +558,7 @@ define([
 		assert.equal(document.getElementById("testmask").inputmask._valueGet(), "+7 922 684-51-86", "Result " + document.getElementById("testmask").inputmask._valueGet());
 	});
 
-	qunit.test("Title Case - Especially", function(assert) {
+	qunit.test("Title Case - Especially", function (assert) {
 		var $fixture = $("#qunit-fixture");
 		$fixture.append('<input type="text" id="testmask" />');
 		var testmask = document.getElementById("testmask");
@@ -575,4 +575,17 @@ define([
 
 		assert.equal(document.getElementById("testmask").inputmask._valueGet(), "Title Case", "Result " + document.getElementById("testmask").inputmask._valueGet());
 	});
+
+	qunit.test("Bug when typing after a fixed character #1299 - gayanj", function (assert) {
+		var $fixture = $("#qunit-fixture");
+		$fixture.append('<input type="text" id="testmask" />');
+		var testmask = document.getElementById("testmask");
+		Inputmask("AaaBAaaVaa").mask(testmask);
+
+		testmask.focus();
+		$.caret(testmask, 4);
+		$("#testmask").Type("a");
+
+		assert.equal(document.getElementById("testmask").inputmask._valueGet(), "___BA__V__", "Result " + document.getElementById("testmask").inputmask._valueGet());
+	});
 });