jiapeng 8 years ago
parent
commit
75b018a028
9 changed files with 221 additions and 20 deletions
  1. 4 0
      css/common.css
  2. 1 0
      html/demo.html
  3. 3 3
      js/common.js
  4. 7 5
      js/date.js
  5. 7 4
      js/dyn-select.js
  6. 4 2
      js/form.js
  7. 5 3
      js/select.js
  8. 4 3
      js/text.js
  9. 186 0
      js/validate.js

+ 4 - 0
css/common.css

@ -2177,6 +2177,10 @@ a cite {
2177 2177
    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
2178 2178
}
2179 2179
2180
.form-item.invalid > a.dd-hand, .form-item.text.invalid > input, .form-item.textarea.invalid > textarea {
2181
	border: 1px solid red;
2182
}
2183
2180 2184
.form-item.select > a.dd-hand, .form-item.text > input, .form-item.date > a.dd-hand {
2181 2185
    height: 34px;
2182 2186
    white-space: nowrap;

+ 1 - 0
html/demo.html

@ -164,6 +164,7 @@
164 164
	<script type="text/javascript" src="../js/spa.js"></script>
165 165
	<script type="text/javascript" src="../js/upload.js"></script>
166 166
	<script type="text/javascript" src="../js/dyn-select.js"></script>
167
	<script type="text/javascript" src="../js/validate.js" ></script>
167 168

168 169
	<script>
169 170
		$(function() {

+ 3 - 3
js/common.js

@ -381,7 +381,7 @@ if(typeof jQuery === 'undefined') {
381 381
				if("function" === te) {
382 382
					target.push(rule);
383 383
				} else if("array" === te) {
384
					target.concat(rule);
384
					rule.forEach(function(item){target.push(item)});
385 385
				}
386 386
			},
387 387
			validate: function(rules, obj) {
@ -400,10 +400,10 @@ if(typeof jQuery === 'undefined') {
400 400
				return true;
401 401
			},
402 402
			valid: function($e) {
403
				$e.removeClass("invald");
403
				$e.removeClass("invalid");
404 404
			},
405 405
			invalid: function($e) {
406
				$e.addClass("invald");
406
				$e.addClass("invalid");
407 407
			},
408 408
			appendChild: function(e, obj) {
409 409
				var docf = doc.createDocumentFragment();

+ 7 - 5
js/date.js

@ -1,5 +1,6 @@
1 1
$.use(["jQuery", "form", "doc", "util", "dropdown"], function($, form, doc, util, dd) {
2
	var readOnly = "readOnly",
2
	var m_rd = "必选的",
3
		readOnly = "readOnly",
3 4
		dd_ctn = "dd-ctn",
4 5
		dd_clean = "dd-clean",
5 6
		showOnly = "showOnly",
@ -160,7 +161,7 @@ $.use(["jQuery", "form", "doc", "util", "dropdown"], function($, form, doc, util
160 161
					if(rv !== val) {
161 162
						$h.attr("code", val);
162 163
						$span.text(dt);
163
						rv=val;
164
						rv = val;
164 165
					}
165 166
				} else {
166 167
					rv = "";
@ -227,15 +228,16 @@ $.use(["jQuery", "form", "doc", "util", "dropdown"], function($, form, doc, util
227 228
			return {
228 229
				name: n,
229 230
				get: function() {
230
					return rv?rv:undefined;
231
					return rv ? rv : undefined;
231 232
				},
232 233
				set: function(data) {
233
					change_date(data?data:"");
234
					change_date(data ? data : "");
234 235
				},
235 236
				validate: function() {
236 237
					if(cls[required]) {
237 238
						if(!rv) {
238
							return "不可为空";
239
							this.invalid(m_rd);
240
							return m_rd;
239 241
						}
240 242
					}
241 243
					return util.validate(rules, this);

+ 7 - 4
js/dyn-select.js

@ -1,5 +1,6 @@
1 1
$.use(["jQuery", "form", "doc", "util", "dropdown", "dict"], function($, form, doc, util, dd, dict) {
2
	var readOnly = "readOnly",
2
	var m_rd = "必选的",
3
		readOnly = "readOnly",
3 4
		showOnly = "showOnly",
4 5
		modelName = 'dyn-select',
5 6
		mModelName = "dyn-mselect",
@ -169,7 +170,8 @@ $.use(["jQuery", "form", "doc", "util", "dropdown", "dict"], function($, form, d
169 170
				validate: function() {
170 171
					if(cls[required]) {
171 172
						if(!rv) {
172
							return "不可为空";
173
							this.invalid(m_rd);
174
							return m_rd;
173 175
						}
174 176
					}
175 177
					return util.validate(rules, this);
@ -281,7 +283,7 @@ $.use(["jQuery", "form", "doc", "util", "dropdown", "dict"], function($, form, d
281 283
			};
282 284
			if(lis.length) {
283 285
				$ul.find("span").each(function() {
284
					dict.dynTransfer(dynCache,$(this));
286
					dict.dynTransfer(dynCache, $(this));
285 287
				});
286 288
			} else {
287 289
				dict.dynApply(dynCache, util.noop);
@ -327,7 +329,8 @@ $.use(["jQuery", "form", "doc", "util", "dropdown", "dict"], function($, form, d
327 329
				validate: function() {
328 330
					if(cls[required]) {
329 331
						if(!rv.length) {
330
							return "不可为空";
332
							this.invalid(m_rd);
333
							return m_rd;
331 334
						}
332 335
					}
333 336
					return util.validate(rules, this);

+ 4 - 2
js/form.js

@ -30,7 +30,7 @@ $.define(["jQuery", "util"], "form", function($, util) {
30 30
		},
31 31
		vd = function(items) {
32 32
			for(key in items) {
33
				if(!items[key].validate())
33
				if(true!==items[key].validate())
34 34
					return false;
35 35
			}
36 36
			return true;
@ -65,7 +65,9 @@ $.define(["jQuery", "util"], "form", function($, util) {
65 65
						if("function" === te) {
66 66
							rules.push(rule);
67 67
						} else if("array" === te) {
68
							rules.concat(rule);
68
							rule.forEach(function(item){
69
								rules.push(item);
70
							});
69 71
						} else if("object" === te) {
70 72
							for(key in rule) {
71 73
								var im = items[key];

+ 5 - 3
js/select.js

@ -1,5 +1,5 @@
1 1
$.use(["jQuery", "form", "doc", "util", "dropdown", "dict"], function($, form, doc, util, dd, dict) {
2
	var readOnly = "readOnly",
2
	var m_rd="必选的",readOnly = "readOnly",
3 3
		showOnly = "showOnly",
4 4
		modelName = 'select',
5 5
		mModelName = "mselect",
@ -169,7 +169,8 @@ $.use(["jQuery", "form", "doc", "util", "dropdown", "dict"], function($, form, d
169 169
				validate: function() {
170 170
					if(cls[required]) {
171 171
						if(!rv) {
172
							return "不可为空";
172
							this.invalid(m_rd);
173
							return m_rd;
173 174
						}
174 175
					}
175 176
					return util.validate(rules, this);
@ -317,7 +318,8 @@ $.use(["jQuery", "form", "doc", "util", "dropdown", "dict"], function($, form, d
317 318
				validate: function() {
318 319
					if(cls[required]) {
319 320
						if(!rv.length) {
320
							return "不可为空";
321
							this.invalid(m_rd);
322
							return m_rd;
321 323
						}
322 324
					}
323 325
					return util.validate(rules, this);

+ 4 - 3
js/text.js

@ -1,5 +1,5 @@
1 1
$.use(["jQuery", "form", "util"], function($, form, util) {
2
	var trim = "trim",
2
	var m_rd="不可为空或空字符串",trim = "trim",
3 3
		readOnly = "readOnly",
4 4
		showOnly = "showOnly",
5 5
		modelName = 'text',
@ -12,7 +12,7 @@ $.use(["jQuery", "form", "util"], function($, form, util) {
12 12
		placeholder = "placeholder",
13 13
		required = "required";
14 14
	form.register(function($e) {
15
		var cls = util.classCheck($e[0], [modelName, trim, readOnly, showOnly, tInt, tBool, tFloat, pw, ]);
15
		var cls = util.classCheck($e[0], [modelName, trim, readOnly, showOnly, tInt, tBool, tFloat, pw,required ]);
16 16
		if(cls[modelName]) {
17 17
			var n = $e.attr("name") || $e.attr("id"),
18 18
				ve, rules = [];
@ -59,7 +59,8 @@ $.use(["jQuery", "form", "util"], function($, form, util) {
59 59
				validate: function() {
60 60
					if(cls[required]) {
61 61
						if(!ve.val().trim()) {
62
							return "不可为空或空字符串";
62
							this.invalid(m_rd)
63
							return m_rd;
63 64
						}
64 65
					}
65 66
					return util.validate(rules, this);

+ 186 - 0
js/validate.js

@ -0,0 +1,186 @@
1
$.define(["jQuery", "util"], "validate", function($, util) {
2
	var returnTrue = function() {
3
			return true;
4
		},
5
		returnFalse = function() {
6
			return false;
7
		},
8
		vDef = function(ps, name) {
9
			return function(obj) {
10
				return "invalid validate[" + name + "] option";
11
			}
12
		},
13
		vRequired = function(msg) {
14
			return function(obj) {
15
				var v = obj.get();
16
				if((undefined === v) || ("" === v) || ($.isArray(v) && v.length === 0)) {
17
					return msg || "必输字段";
18
				}
19
			};
20
		},
21
		vMax = function(ps) {
22
			var tn = $.type(ps),
23
				msg = "不能大于";
24
			if(tn === "object") {
25
				msg = ps.msg || (msg + ps.val);
26
				ps = ps.val;
27
				tn = $.type(ps);
28
			} else {
29
				msg = msg + ps;
30
			}
31
			if(tn === "number") {
32
				return function(obj) {
33
					var val = obj.get();
34
					if(val) {
35
						if($.iaArray(val)) {
36
							if(val.length > ps) {
37
								return msg;
38
							}
39
						} else {
40
							if(val > ps) {
41
								return msg;
42
							}
43
						}
44
					} else if(0 === val) {
45
						if(0 > ps) {
46
							return msg;
47
						}
48
					}
49
					return true;
50
				};
51
			} else if(tn === "string") {
52
				var val = obj.get();
53
				if(val) {
54
					if(val > ps) {
55
						return msg;
56
					}
57
				}
58
			}
59

60
		},
61
		vMin = function(ps) {
62
			var tn = $.type(ps),
63
				msg = "不能小于";
64
			if(tn === "object") {
65
				msg = ps.msg || (msg + ps.val);
66
				ps = ps.val;
67
				tn = $.type(ps);
68
			} else {
69
				msg = msg + ps;
70
			}
71
			if(tn === "number") {
72
				return function(obj) {
73
					var val = obj.get();
74
					if(val) {
75
						if($.iaArray(val)) {
76
							if(val.length < ps) {
77
								return msg;
78
							}
79
						} else {
80
							if(val < ps) {
81
								return msg;
82
							}
83
						}
84
					} else if(0 === val) {
85
						if(0 > ps) {
86
							return msg;
87
						}
88
					}
89
					return true;
90
				};
91
			} else if(tn === "string") {
92
				var val = obj.get();
93
				if(val) {
94
					if(val < ps) {
95
						return msg;
96
					}
97
				}
98
			}
99
		},
100
		vLen = function(ps) {
101
			var msg = "长度不等于";
102
			if($.type(ps) === "object") {
103
				msg = ps.msg || (msg + ps.val);
104
				ps = ps.val;
105
			} else {
106
				msg = msg + ps;
107
			}
108
			return function(obj) {
109
				var val = obj.get();
110
				if(val || (val === "")) {
111
					if(val.length !== ps) {
112
						return msg;
113
					}
114
				}
115
			};
116
		},
117
		vMinLen = function(ps) {
118
			var msg = "长度小于";
119
			if($.type(ps) === "object") {
120
				msg = ps.msg || (msg + ps.val);
121
				ps = ps.val;
122
			} else {
123
				msg = msg + ps;
124
			}
125
			return function(obj) {
126
				var val = obj.get();
127
				if(val || (val === "")) {
128
					if(val.length < ps) {
129
						return msg;
130
					}
131
				}
132
			};
133
		},
134
		vMaxLen = function(ps) {
135
			var msg = "长度大于";
136
			if($.type(ps) === "object") {
137
				msg = ps.msg || (msg + ps.val);
138
				ps = ps.val;
139
			} else {
140
				msg = msg + ps;
141
			}
142
			return function(obj) {
143
				var val = obj.get();
144
				if(val || (val === "")) {
145
					if(val.length > ps) {
146
						return msg;
147
					}
148
				}
149
			};
150
		},
151
		impls = {
152
			"_def": vDef,
153
			"required": vRequired,
154
			"max": vMax,
155
			"min": vMin,
156
			"len": vLen,
157
			"minLen": vMinLen,
158
			"maxLen": vMaxLen
159
		},
160
		reg = function(name, hand) {
161
			impls[name] = hand;
162
		},
163
		parseRules = function(obj) {
164
			var ret = [];
165
			for(key in obj) {
166
				var impl = impls[key] || impls["_def"];
167
				ret.push(impl(obj[key], key));
168
			}
169
			return ret;
170
		},
171
		configForm = function(form, options) {
172
			for(var key in options) {
173
				var item = form.item(key),
174
					option = options[key];
175
				if(item && option) {
176
					item.addRules(parseRules(option));
177
				}
178
			}
179
		};
180

181
	return {
182
		register: reg,
183
		form: configForm,
184
	};
185

186
});