|
1 | 1 | /************************************** |
2 | 2 | @Name: jQuery-Validator 基于jQuery的前端验证框架 |
3 | | - @Version: 1.3.9 |
| 3 | + @Version: 1.4.0 |
4 | 4 | @Author: Ready |
5 | 5 | @Date: 2022-01-12 |
6 | 6 | @Documentation: https://codeplayer.vip/p/j7sud |
|
10 | 10 | !function ($, global) { |
11 | 11 | var console = global && global.console; |
12 | 12 | if(typeof jQuery === "undefined" || $ !== jQuery){ |
13 | | - console && console.log("jQuery must be initialized before loading the Validator."); |
| 13 | + console && console.warn("jQuery must be initialized before loading the Validator."); |
14 | 14 | return; |
15 | 15 | } |
16 | 16 | var V = function(method){ |
|
36 | 36 | }, |
37 | 37 | fn = V.fn = V.prototype = { |
38 | 38 | // 版本号 |
39 | | - version: "1.3.9", |
| 39 | + version: "1.4.0", |
40 | 40 |
|
41 | 41 | constructor: V, |
42 | 42 |
|
|
45 | 45 | return $dom.val(); |
46 | 46 | }, |
47 | 47 |
|
48 | | - // 严格模式:如果为false,则指定选择器没有对应元素时,直接忽略该元素的校验 |
49 | | - strict: true, |
| 48 | + // 校验跳过模式(支持位运算或运算):0=不忽略任何元素;1=仅忽略不存在的元素;2=仅忽略不可见的元素;4=仅忽略只读的元素 |
| 49 | + skip: 0, |
| 50 | + |
| 51 | + filter: function($dom, context){ |
| 52 | + var s = this.skip; |
| 53 | + if ( f > 0 && ( |
| 54 | + (s & 1) === 1 && !$dom.length |
| 55 | + || (s & 2) === 2 && !$dom.is(':visible') |
| 56 | + || (s & 4) === 4 && $dom.is('[readonly]')) |
| 57 | + ){ |
| 58 | + return false; |
| 59 | + } |
| 60 | + }, |
50 | 61 |
|
51 | 62 | // 用于选取label的attribute |
52 | 63 | labelAttr: "label", |
|
163 | 174 | expr = sign + expr; |
164 | 175 | } |
165 | 176 | // 位数表达式 |
166 | | - var subExpr = expr.substr(1); |
| 177 | + var subExpr = expr.substr(1), digits = "+", fraction = ""; |
167 | 178 | switch(subExpr){ |
168 | 179 | case "int": |
169 | 180 | case "integer": |
170 | | - regex = new RegExp("^" + signExpr + "\\d+$"); |
171 | 181 | break; |
172 | 182 | case "money": |
173 | | - regex = new RegExp("^" + signExpr + "\\d+(\\.\\d{1,2})?$"); |
| 183 | + fraction = "(\\.\\d{1,2})?"; |
174 | 184 | break; |
175 | 185 | case "float": |
176 | 186 | case "double": |
177 | | - regex = new RegExp("^" + signExpr + "\\d+(\\.\\d+)?$"); |
| 187 | + fraction = "(\\.\\d+)?"; |
178 | 188 | break; |
179 | 189 | default: |
180 | 190 | var subArray = subExpr.split(".", 2); |
181 | | - regex = "^" + signExpr + "\\d" + subArray[0]; |
182 | | - if(subArray[1]) regex += "\\.\\d" + subArray[1]; |
183 | | - regex = new RegExp(regex + "$"); |
| 191 | + digits = subArray[0]; |
| 192 | + if( subArray[1] ){ |
| 193 | + fraction = subArray[1].startsWith("{0,") |
| 194 | + ? "(\\.\\d" + subArray[1].replace(/^\{0,/, "{1,") + ")?" |
| 195 | + : "\\.\\d" + subArray[1]; |
| 196 | + } |
184 | 197 | } |
185 | | - cache[context.rule.format] = regex; |
| 198 | + cache[context.rule.format] = regex = new RegExp("^" + signExpr + "\\d" + digits + fraction + "$"); |
186 | 199 | } |
187 | 200 | V.debug && log( "number formatter [" + expr + "] regexp:", regex ); |
188 | 201 | if(regex.test(value)){ |
|
533 | 546 | context = V.context = { ruleName: ruleName, origin: rule, $dom: $dom, rule: rule }; |
534 | 547 | V.debug && log( "current validate context [" + (is$ ? $dom.selector : value) + "]:" , context ); |
535 | 548 | if( is$ ){ |
536 | | - if(!$dom.length && !me.strict) return me.afterHandler(true, context); // 非严格模式,直接跳过校验 |
| 549 | + if( me.filter($dom, context) === false ) return me.afterHandler(true, context); // 非严格模式,直接跳过校验 |
537 | 550 | value = me.getValue($dom, context); |
538 | 551 | if( required == null ){ |
539 | 552 | var r = me.isRequired(value, context); |
|
0 commit comments