浏览代码

added some extra autocompletion logic in the date aliases
<ctrl> + right arrow fills in today

Robin Herbots 13 年之前
父节点
当前提交
cd5944d463
共有 1 个文件被更改,包括 57 次插入5 次删除
  1. 57 5
      js/jquery.inputmask.extentions.js

+ 57 - 5
js/jquery.inputmask.extentions.js

@@ -3,7 +3,7 @@ Input Mask plugin extentions
 http://github.com/RobinHerbots/jquery.inputmask
 Copyright (c) 2010 Robin Herbots
 Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-Version: 0.0.6
+Version: 0.0.7
 
 Optional extentions on the jquery.inputmask base
 */
@@ -55,10 +55,22 @@ Optional extentions on the jquery.inputmask base
             regex: {
                 monthpre: new RegExp("[01]"),
                 month: new RegExp("((0[1-9]|[12][0-9])\/(0[1-9]|1[012]))|(30\/(0[13-9]|1[012]))|(31\/(0[13578]|1[02]))"),
+				yearpre1: new RegExp("[12]"),                
                 year: new RegExp("(19|20)\\d{2}"),
                 daypre: new RegExp("[0-3]"),
                 day: new RegExp("0[1-9]|[12][0-9]|3[01]")
             },
+            leapday: "29/02/",
+            onKeyUp: function(e, opts) {
+                                var $input = $(this), input = this;
+                                if (e.keyCode == opts.keyCode.TAB) {
+                                    var nptStr = input._valueGet();
+                                    //do stuff
+                                } else if(e.ctrlKey && e.keyCode == opts.keyCode.RIGHT){
+                                	var today = new Date();
+                                	$input.val(today.getDate().toString() + (today.getMonth()+1).toString() + today.getFullYear().toString());
+                                }
+                            },
             definitions: {
                 'd': { //day
                     validator: function(chrs, buffer, pos, strict, opts) {
@@ -126,7 +138,7 @@ Optional extentions on the jquery.inputmask base
                             validator: function(chrs, buffer, pos, strict, opts) {
                                 if (opts.regex.year.test(chrs)) {
                                     var dayMonthValue = buffer.join('').substr(0, 6);
-                                    if (dayMonthValue != "29/02/")
+                                    if (dayMonthValue != opts.leapday)
                                         return true;
                                     else {
                                         var year = parseInt(chrs);  //detect leap year
@@ -142,7 +154,21 @@ Optional extentions on the jquery.inputmask base
                             },
                             cardinality: 4,
                             prevalidator: [
-                        { validator: "[12]", cardinality: 1 },
+                        { validator: function(chrs, buffer, pos, strict, opts) {
+                        		var isValid = opts.regex.yearpre1.test(chrs);
+                            	if (!strict && !isValid) {
+                                	var yearPrefix = (new Date()).getFullYear().toString().slice(0,2);
+
+                            	    isValid = opts.regex.yearpre1.test(yearPrefix + chrs);
+                        	        if (isValid) {
+                    	                buffer[pos++] = yearPrefix[0];
+                	                    buffer[pos++] = yearPrefix[1];
+            	                        return pos;
+        	                        }
+    	                        }
+	                            return isValid;
+                        	}
+                        	, cardinality: 1 },
                         { validator: "(19|20)", cardinality: 2 },
                         { validator: "(19|20)\\d", cardinality: 3 }
                         ]
@@ -159,8 +185,20 @@ Optional extentions on the jquery.inputmask base
                         daypre: new RegExp("((0[13-9]|1[012])\/[0-3])|(02\/[0-2])"),
                         month: new RegExp("0[1-9]|1[012]"),
                         monthpre: new RegExp("[01]"),
+                        yearpre1: new RegExp("[12]"),                
                         year: new RegExp("(19|20)\\d{2}")
                     },
+                    leapday: "02/29/",
+                    onKeyUp: function(e, opts) {
+                                var $input = $(this), input = this;
+                                if (e.keyCode == opts.keyCode.TAB) {
+                                    var nptStr = input._valueGet();
+                                    //do stuff
+                                } else if(e.ctrlKey && e.keyCode == opts.keyCode.RIGHT){
+                                	var today = new Date();
+                                	$input.val((today.getMonth()+1).toString() + today.getDate().toString() + today.getFullYear().toString());
+                                }
+                            },
                     definitions: {
                         'd': { //day
                             validator: function(chrs, buffer, pos, strict, opts) {
@@ -229,7 +267,7 @@ Optional extentions on the jquery.inputmask base
                                     validator: function(chrs, buffer, pos, strict, opts) {
                                         if (opts.regex.year.test(chrs)) {
                                             var monthDayValue = buffer.join('').substr(0, 6);
-                                            if (monthDayValue != "02/29/")
+                                            if (monthDayValue != opts.leapday)
                                                 return true;
                                             else {
                                                 var year = parseInt(chrs);  //detect leap year
@@ -245,7 +283,21 @@ Optional extentions on the jquery.inputmask base
                                     },
                                     cardinality: 4,
                                     prevalidator: [
-                        { validator: "[12]", cardinality: 1 },
+                        { validator: function(chrs, buffer, pos, strict, opts) {
+                        		var isValid = opts.regex.yearpre1.test(chrs);
+                            	if (!strict && !isValid) {
+                                	var yearPrefix = (new Date()).getFullYear().toString().slice(0,2);
+
+                            	    isValid = opts.regex.yearpre1.test(yearPrefix + chrs);
+                        	        if (isValid) {
+                    	                buffer[pos++] = yearPrefix[0];
+                	                    buffer[pos++] = yearPrefix[1];
+            	                        return pos;
+        	                        }
+    	                        }
+	                            return isValid;
+                        	}                       
+                        , cardinality: 1 },
                         { validator: "(19|20)", cardinality: 2 },
                         { validator: "(19|20)\\d", cardinality: 3 }
                         ]