浏览代码

IE9 SCRIPT445: Object does not support this action fix #1135

Robin Herbots 10 年之前
父节点
当前提交
3f9357125f

+ 1 - 0
CHANGELOG.md

@@ -12,6 +12,7 @@ All notable changes to this project will be documented in this file.
 - update alternation logic
 
 ### Fixed
+- IE9 SCRIPT445: Object does not support this action #1135
 - Multiple Mask Click Focus Error #1133
 - Double enter for submit #1131
 - Multiple masks #760

+ 1 - 1
bower.json

@@ -1,6 +1,6 @@
 {
   "name": "jquery.inputmask",
-  "version": "3.2.6-17",
+  "version": "3.2.6-21",
   "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.2.6-17",
+  "version": "3.2.6-21",
   "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.2.6-17",
+  "version": "3.2.6-21",
   "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 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-17
+* Version: 3.2.6-21
 */
 !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 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-17
+* Version: 3.2.6-21
 */
 !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 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-17
+* Version: 3.2.6-21
 */
 !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);

+ 8 - 8
dist/inputmask/inputmask.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-17
+* Version: 3.2.6-21
 */
 !function(factory) {
     "function" == typeof define && define.amd ? define([ "inputmask.dependencyLib" ], factory) : "object" == typeof exports ? module.exports = factory(require("./inputmask.dependencyLib.jquery")) : factory(window.dependencyLib || jQuery);
@@ -705,7 +705,7 @@
                 initialNdx = seekNext(initialNdx));
             } else initialNdx = seekNext(initialNdx);
             $.each(inputValue, function(ndx, charCode) {
-                var keypress = new Event("keypress");
+                var keypress = new $.Event("keypress");
                 keypress.which = charCode.charCodeAt(0), charCodes += charCode;
                 var lvp = getLastValidPosition(void 0, !0), lvTest = getMaskSet().validPositions[lvp], nextTest = getTestTemplate(lvp + 1, lvTest ? lvTest.locator.slice() : void 0, lvp);
                 if (!isTemplateMatch() || strict || opts.autoUnmask) {
@@ -713,7 +713,7 @@
                     keypressEvent.call(input, keypress, !0, !1, strict, pos), initialNdx = pos + 1, 
                     charCodes = "";
                 } else keypressEvent.call(input, keypress, !0, !1, !0, lvp + 1);
-            }), writeOut && writeBuffer(input, getBuffer(), document.activeElement === input ? seekNext(getLastValidPosition(0)) : void 0, new Event("checkval"));
+            }), writeOut && writeBuffer(input, getBuffer(), document.activeElement === input ? seekNext(getLastValidPosition(0)) : void 0, new $.Event("checkval"));
         }
         function unmaskedvalue(input) {
             if (input && void 0 === input.inputmask) return input.value;
@@ -865,7 +865,7 @@
                     }
                     if (lastAlt > -1) for (;validInputs.length > 0; ) {
                         getMaskSet().p = seekNext(getLastValidPosition());
-                        var keypress = new Event("keypress");
+                        var keypress = new $.Event("keypress");
                         keypress.which = validInputs.pop().charCodeAt(0), keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p);
                     } else getMaskSet().validPositions = $.extend(!0, {}, positionsClone);
                 }
@@ -971,9 +971,9 @@
             !1;
         }
         function inputFallBackEvent(e) {
-            var input = this;
-            checkVal(input, !0, !1, input.inputmask._valueGet().split("")), isComplete(getBuffer()) === !0 && $(input).trigger("complete"), 
-            e.preventDefault();
+            var input = this, inputValue = input.inputmask._valueGet();
+            getBuffer().join("") !== inputValue && (checkVal(input, !0, !1, inputValue.split("")), 
+            isComplete(getBuffer()) === !0 && $(input).trigger("complete"), e.preventDefault());
         }
         function mobileInputEvent(e) {
             var input = this, caretPos = caret(input), currentValue = input.inputmask._valueGet();
@@ -991,7 +991,7 @@
             0 === ev.data.indexOf(compositionData) && (resetMaskSet(), getMaskSet().p = seekNext(-1), 
             skipInputEvent = !0);
             for (var newData = ev.data, i = 0; i < newData.length; i++) {
-                var keypress = new Event("keypress");
+                var keypress = new $.Event("keypress");
                 keypress.which = newData.charCodeAt(i), skipKeyPressEvent = !1, ignorable = !1, 
                 keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p);
             }

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

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-17
+* Version: 3.2.6-21
 */
 !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 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-17
+* Version: 3.2.6-21
 */
 !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 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-17
+* Version: 3.2.6-21
 */
 !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 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-17
+* Version: 3.2.6-21
 */
 !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);

+ 8 - 8
dist/jquery.inputmask.bundle.js

@@ -3,7 +3,7 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-17
+* Version: 3.2.6-21
 */
 !function($) {
     function Inputmask(alias, options) {
@@ -703,7 +703,7 @@
                 initialNdx = seekNext(initialNdx));
             } else initialNdx = seekNext(initialNdx);
             $.each(inputValue, function(ndx, charCode) {
-                var keypress = new Event("keypress");
+                var keypress = new $.Event("keypress");
                 keypress.which = charCode.charCodeAt(0), charCodes += charCode;
                 var lvp = getLastValidPosition(void 0, !0), lvTest = getMaskSet().validPositions[lvp], nextTest = getTestTemplate(lvp + 1, lvTest ? lvTest.locator.slice() : void 0, lvp);
                 if (!isTemplateMatch() || strict || opts.autoUnmask) {
@@ -711,7 +711,7 @@
                     keypressEvent.call(input, keypress, !0, !1, strict, pos), initialNdx = pos + 1, 
                     charCodes = "";
                 } else keypressEvent.call(input, keypress, !0, !1, !0, lvp + 1);
-            }), writeOut && writeBuffer(input, getBuffer(), document.activeElement === input ? seekNext(getLastValidPosition(0)) : void 0, new Event("checkval"));
+            }), writeOut && writeBuffer(input, getBuffer(), document.activeElement === input ? seekNext(getLastValidPosition(0)) : void 0, new $.Event("checkval"));
         }
         function unmaskedvalue(input) {
             if (input && void 0 === input.inputmask) return input.value;
@@ -863,7 +863,7 @@
                     }
                     if (lastAlt > -1) for (;validInputs.length > 0; ) {
                         getMaskSet().p = seekNext(getLastValidPosition());
-                        var keypress = new Event("keypress");
+                        var keypress = new $.Event("keypress");
                         keypress.which = validInputs.pop().charCodeAt(0), keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p);
                     } else getMaskSet().validPositions = $.extend(!0, {}, positionsClone);
                 }
@@ -969,9 +969,9 @@
             !1;
         }
         function inputFallBackEvent(e) {
-            var input = this;
-            checkVal(input, !0, !1, input.inputmask._valueGet().split("")), isComplete(getBuffer()) === !0 && $(input).trigger("complete"), 
-            e.preventDefault();
+            var input = this, inputValue = input.inputmask._valueGet();
+            getBuffer().join("") !== inputValue && (checkVal(input, !0, !1, inputValue.split("")), 
+            isComplete(getBuffer()) === !0 && $(input).trigger("complete"), e.preventDefault());
         }
         function mobileInputEvent(e) {
             var input = this, caretPos = caret(input), currentValue = input.inputmask._valueGet();
@@ -989,7 +989,7 @@
             0 === ev.data.indexOf(compositionData) && (resetMaskSet(), getMaskSet().p = seekNext(-1), 
             skipInputEvent = !0);
             for (var newData = ev.data, i = 0; i < newData.length; i++) {
-                var keypress = new Event("keypress");
+                var keypress = new $.Event("keypress");
                 keypress.which = newData.charCodeAt(i), skipKeyPressEvent = !1, ignorable = !1, 
                 keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p);
             }

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


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

@@ -3,6 +3,6 @@
 * http://github.com/RobinHerbots/jquery.inputmask
 * Copyright (c) 2010 - 2015 Robin Herbots
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.2.6-17
+* Version: 3.2.6-21
 */
 !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});

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


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


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


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


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


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


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


+ 11 - 0
extra/dependencyLibs/inputmask.dependencyLib.jqlite.js

@@ -208,6 +208,17 @@ Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.p
 		$.data = function(elem, name, data) {
 			return $(elem).data(name, data);
 		};
+		$.Event = function CustomEvent(event, params) {
+			params = params || {
+				bubbles: false,
+				cancelable: false,
+				detail: undefined
+			};
+			var evt = document.createEvent('CustomEvent');
+			evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
+			return evt;
+		}
+		$.Event.prototype = window.Event.prototype;
 
 		window.dependencyLib = $;
 		return $;

+ 18 - 19
extra/dependencyLibs/inputmask.dependencyLib.js

@@ -84,10 +84,13 @@ Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.p
 			return elem instanceof Element;
 		}
 
-		function Event(elem) {
-			if (elem instanceof Event) {
+		function DependencyLib(elem) {
+			if (elem instanceof DependencyLib) {
 				return elem;
 			}
+			if (!(this instanceof DependencyLib)) {
+				return new DependencyLib(elem);
+			}
 			if (elem !== undefined && elem !== null && elem !== window) {
 				this[0] = elem.nodeName ? elem : (elem[0] !== undefined && elem[0].nodeName ? elem[0] : document.querySelector(elem));
 				if (this[0] !== undefined && this[0] !== null) {
@@ -96,7 +99,7 @@ Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.p
 			}
 		}
 
-		Event.prototype = {
+		DependencyLib.prototype = {
 			on: function(events, handler) {
 				if (isValidElement(this[0])) {
 					var eventRegistry = this[0].eventRegistry,
@@ -259,22 +262,6 @@ Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.p
 			}
 		};
 
-		function DependencyLib(elem) {
-			if (elem instanceof DependencyLib) {
-				return elem;
-			}
-			if (!(this instanceof DependencyLib)) {
-				return new DependencyLib(elem);
-			}
-			if (elem !== undefined && elem !== null && elem !== window) {
-				this[0] = elem.nodeName ? elem : (elem[0] !== undefined && elem[0].nodeName ? elem[0] : document.querySelector(elem));
-				if (this[0] !== undefined && this[0] !== null) {
-					this[0].eventRegistry = this[0].eventRegistry || {};
-				}
-			}
-		}
-
-		DependencyLib.prototype = Event.prototype;
 		//static
 		DependencyLib.isFunction = function(obj) {
 			return type(obj) === "function";
@@ -432,6 +419,18 @@ Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.p
 			}
 		};
 
+		DependencyLib.Event = function CustomEvent(event, params) {
+			params = params || {
+				bubbles: false,
+				cancelable: false,
+				detail: undefined
+			};
+			var evt = document.createEvent('CustomEvent');
+			evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
+			return evt;
+		}
+		DependencyLib.Event.prototype = window.Event.prototype;
+
 		window.dependencyLib = DependencyLib;
 		return DependencyLib;
 	}));

+ 13 - 14
js/inputmask.js

@@ -1698,7 +1698,7 @@
 
 
 				$.each(inputValue, function(ndx, charCode) {
-					var keypress = new Event("keypress");
+					var keypress = new $.Event("keypress");
 					keypress.which = charCode.charCodeAt(0);
 					charCodes += charCode;
 					var lvp = getLastValidPosition(undefined, true),
@@ -1714,7 +1714,7 @@
 					}
 				});
 				if (writeOut) {
-					writeBuffer(input, getBuffer(), document.activeElement === input ? seekNext(getLastValidPosition(0)) : undefined, new Event("checkval"));
+					writeBuffer(input, getBuffer(), document.activeElement === input ? seekNext(getLastValidPosition(0)) : undefined, new $.Event("checkval"));
 				}
 			}
 
@@ -1939,10 +1939,7 @@
 				off: function(input, event) {
 					if (input.inputmask && input.inputmask.events) {
 						var events;
-						if (event) {
-							events = [];
-							events[event] = input.inputmask.events[event]
-						} else events = input.inputmask.events;
+						event ? (events = [], events[event] = input.inputmask.events[event]) : events = input.inputmask.events;
 						$.each(events, function(eventName, evArr) {
 							while (evArr.length > 0) {
 								var ev = evArr.pop();
@@ -2093,7 +2090,7 @@
 						if (lastAlt > -1) {
 							while (validInputs.length > 0) {
 								getMaskSet().p = seekNext(getLastValidPosition());
-								var keypress = new Event("keypress");
+								var keypress = new $.Event("keypress");
 								keypress.which = validInputs.pop().charCodeAt(0);
 								keypressEvent.call(input, keypress, true, false, false, getMaskSet().p);
 							}
@@ -2357,14 +2354,16 @@
 			}
 
 			function inputFallBackEvent(e) { //fallback when keypress & compositionevents fail
-				var input = this;
-				checkVal(input, true, false, input.inputmask._valueGet().split(""));
+				var input = this,
+					inputValue = input.inputmask._valueGet();
+				if (getBuffer().join('') !== inputValue) {
+					checkVal(input, true, false, inputValue.split(""));
 
-				if (isComplete(getBuffer()) === true) {
-					$(input).trigger("complete");
+					if (isComplete(getBuffer()) === true) {
+						$(input).trigger("complete");
+					}
+					e.preventDefault();
 				}
-
-				e.preventDefault();
 			}
 
 			function mobileInputEvent(e) {
@@ -2407,7 +2406,7 @@
 				}
 				var newData = ev.data;
 				for (var i = 0; i < newData.length; i++) {
-					var keypress = new Event("keypress");
+					var keypress = new $.Event("keypress");
 					keypress.which = newData.charCodeAt(i);
 					skipKeyPressEvent = false;
 					ignorable = false;

+ 1 - 1
package.json

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

+ 2 - 2
qunit/config.js

@@ -4,9 +4,9 @@ require.config({
 		"jquery": "../node_modules/jquery/dist/jquery",
 		"jqlite": "../node_modules/jqlite/jqlite",
 		"qunit": "../node_modules/qunitjs/qunit/qunit",
-		// "inputmask.dependencyLib": "../dist/inputmask/inputmask.dependencyLib.jquery",
+		"inputmask.dependencyLib": "../dist/inputmask/inputmask.dependencyLib.jquery",
 		// "inputmask.dependencyLib": "../extra/dependencyLibs/inputmask.dependencyLib",
-		"inputmask.dependencyLib": "../extra/dependencyLibs/inputmask.dependencyLib.jqlite",
+		// "inputmask.dependencyLib": "../extra/dependencyLibs/inputmask.dependencyLib.jqlite",
 		// "inputmask": "../dist/inputmask/inputmask"
 		"inputmask": "../js/inputmask"
 	}

+ 10 - 6
qunit/simulator.js

@@ -65,10 +65,14 @@
 		$.fn = $.fn || $.prototype;
 		$.fn.SendKey = function(keyCode, modifier) {
 			function trigger(elem, evnt) {
-				if (document.createEvent) {
-					elem.dispatchEvent(evnt);
+				if ($ === jQuery) {
+					$(elem).trigger(evnt);
 				} else {
-					elem.fireEvent("on" + evnt.eventType, evnt);
+					if (document.createEvent) {
+						elem.dispatchEvent(evnt);
+					} else {
+						elem.fireEvent("on" + evnt.eventType, evnt);
+					}
 				}
 			}
 			var sendDummyKeydown = false;
@@ -96,9 +100,9 @@
 					}
 				default:
 					{
-						var keydown = new Event("keydown"),
-							keypress = new Event("keypress"),
-							keyup = new Event("keyup");
+						var keydown = new $.Event("keydown"),
+							keypress = new $.Event("keypress"),
+							keyup = new $.Event("keyup");
 
 						if (!sendDummyKeydown) {
 							keydown.keyCode = keyCode;