-
Notifications
You must be signed in to change notification settings - Fork 167
/
form-validate.jade
685 lines (616 loc) · 27.2 KB
/
form-validate.jade
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
extends _base
block title
title 表单校验
block sidebar
+sidebar('form-validate')
block content
h2.sui-page-header 开发者文档
p.sui-lead
| 强大的表单校验器,通过简单的配置规则即可实现表单校验。<br />
| 并且支持自定义校验插件。
br
ul.unstyled
li
strong 更新 v1.4.2: 修复了校验报错消息中图标是斜体的bug。
li
strong 更新 v1.2.2: 增加了两个新的接口可以直接控制错误消息 "showError" 和 "hideError",可以手动调用来显示/隐藏一个错误消息。增加了一个disable/enable接口,可以启用/禁用表单校验。
li
strong 更新 v1.1.9: 自定义错误消息区分未填写和填写错误两种情况,可以分别定义。
li
strong 更新 v1.1.7: 修复了url校验规则无法支持二级域名的bug,增加了一个出错消息配置,可以单独配置每一个输入框的错误消息。
h2 通过HTML配置规则
p.lead
| 通过html标签可以直接配置规则,不用写任何js代码,在form上加上 <code>.sui-validate</code>之后会自动初始化校验器。
br
| 规则通过input标签的 <code>data-rules</code> 来定义,以 | 分割不同的规则,每个规则由规则名和规则值组成,规则值是可选的。
br
| 比如:<code>data-rules='required|email|minlength=8'</code>
ul.sui-nav.nav-tabs.nav-large
li.active
a(href='#demo1', data-toggle='tab') 示例
li
a(href='#code1', data-toggle='tab') 代码
div.tab-content
div.tab-pane.active#demo1
div.bs-docs-example
form.sui-form.form-horizontal.sui-validate
div.control-group
label.control-label(for="inputEmail") 邮箱:
div.controls
input(type="text" id="inputEmail" name='name' placeholder="邮箱" data-rules='required|email')
div.control-group
label.control-label(for="inputPassword") 密码:
div.controls
input(type="password" id="inputPassword" name='password' placeholder="密码" data-rules='required' title='密码')
div.control-group
label.control-label(for="inputRepassword") 重复密码:
div.controls
input(type="password" id="inputRepassword" name='repassword' placeholder="重复密码" data-rules='required|match=password')
div.control-group
label.control-label(for="inputGender") 性别:
div.controls
label.radio-pretty.inline(data-toggle='radio')
input(type='radio' name='gender' value='1' data-rules='required')
span 男
label.radio-pretty.inline(data-toggle='radio')
input(type='radio' name='gender' value='2' data-rules='required')
span 女
div.control-group
label.control-label(for="inputGender") 地址:
div.controls
span.sui-dropdown.dropdown-bordered.select
span.dropdown-inner
a.dropdown-toggle(role="button" data-toggle="dropdown" href="#")
input(name='city' type='hidden' data-rules='required')
i.caret
span 请选择
ul#menu4.sui-dropdown-menu(role="menu" aria-labelledby="drop4")
li(role="presentation")
a(role="menuitem" tabindex="-1" href="javascript:void(0);" value='bj') 北京
li(role="presentation")
a(role="menuitem" tabindex="-1" href="javascript:void(0);" value='sb') 圣彼得堡
div.control-group
label.control-label.v-top(for="inputDes") 自我介绍:
div.controls
textarea(id="inputDes" name='des' placeholder="自我介绍" data-rules='required')
div.control-group
label.control-label()
div.controls
button.sui-btn.btn-primary(type="submit") 立即注册
div.tab-pane#code1
pre.prettyprint.linenums(data-target='#demo1>div')
ul.demo-operations.clearfix
li
a.copy-btn(href='javascript:void(0)', data-target='#demo1>div') 复制代码
h2 通过JS配置规则
p
| 除了在html中直接配置规则,也可以在js中配置规则,两者可以结合使用,在JS中配置的规则会覆盖掉html中的同名规则。
br
| HTML中的规则值只能为字符串,而JS中可以把规则值配置为函数从而实现更强大的功能。
ul.sui-nav.nav-tabs.nav-large
li.active
a(href='#demo5', data-toggle='tab') 示例
li
a(href='#code5', data-toggle='tab') 代码
li
a(href='#doc5', data-toggle='tab') 文档
li
a(href='#api5', data-toggle='tab') api
li
a(href='#event5', data-toggle='tab') 事件
div.tab-content
div.tab-pane.active#demo5
div.bs-docs-example
form.sui-form.form-horizontal#form5
div.control-group
label.control-label(for="inputEmail") 邮箱:
div.controls
input(type="text" id="inputEmail" name='email' placeholder="邮箱")
div.control-group
label.control-label(for="inputPassword") 密码:
div.controls
input(type="password" id="inputPassword" name='password' placeholder="密码" title='密码')
div.control-group
label.control-label(for="inputRepassword") 重复密码:
div.controls
input(type="password" id="inputRepassword" name='repassword' placeholder="重复密码")
div.control-group
label.control-label(for="inputGender") 性别:
div.controls
label.radio-pretty.inline(data-toggle='radio')
input(type='radio' name='gender' value='1')
span 男
label.radio-pretty.inline(data-toggle='radio')
input(type='radio' name='gender' value='2')
span 女
div.control-group
label.control-label(for="sanwei") 三维:
div.controls
input(type="text" id="sanwei" name='sanwei' placeholder="三维")
div.sui-msg.msg-tips.msg-naked
div.msg-con 女生必填
s.msg-icon
div.control-group
label.control-label(for="sanwei")
div.controls
button.sui-btn.btn-primary(type="submit") 立即注册
script.
$("#form5").validate({
rules: {
email: {
required: true,
minlength: 2,
maxlength: 10
},
password: {
required: true,
minlength: 6,
maxlength: 12
},
repassword: {
required: true,
prefill: 'password',
match: 'password'
},
sanwei: {
required: function($input) {
var value = $input.val()
var $form = $input.parents("form")
var gender = $form.find("[name='gender']:checked").val()
if (gender == 2 && !value) {
return false
}
return true
}
},
gender: {
required: true
}
},
messages: {
email: "亲,你连邮箱都没有么"
},
success: function() {
$.alert("恭喜,没有问题了。");
return false;
}
})
div.tab-pane#code5
pre.prettyprint.linenums(data-target='#demo5>div')
div.tab-pane#doc5
h4 一,通过两种方式可以启用表单校验
ol
li
| 通过在form上添加
code .sui-validate
li
| 通过直接调用js方法
code $("form").validate()
p.sui-lead
| 校验组件依赖name属性,所以请确保表单中的元素有合理的name。
| 部分规则如prefill会依赖title属性。
h4 注意:表单校验需要依赖input元素的 <code>name</code>属性。
h4 二,配置说明
p
| 调用validate方法的时候可以传入一个配置对象,所有配置项如下:
table.sui-table
tr
th 名称
th 默认值
th 说明
tr
td errorTpl
td <div class="sui-msg msg-error">\n <div class="msg-con">\n <span>$errorMsg</span>\n <s class="msg-icon"></s>\n </div>\n</div>
td
| 错误提示模板,其中的变量 <code>$errorMsg</code> 是错误消息
tr
td inputErrorClass
td input-error
td
| 出错的input会被添加这个class以高亮显示
tr
td placeError
td
|function($error, $input) {
| /**参见源码**/
|}
td
| 放置错误提示信息,在显示错误信息之前,会调用此方法把错误信息放在合适的位置
| 其中两个参数分别是:
ul
li $error, 出错消息
li $input,出错的输入框
tr
td rules
td undefined
td
|定义规则,注意和$.validate.setRule区别,这里是定义某一个input的规则,和data-rules功能相似但是比它的优先级更高。
br
|rules通过name来为input指定规则,比如
br
| rules: { password: { minlength: 10}}
br
| 表示为 name=password 的输入框定义了一条规则 minlength=10
tr
td messages
td undefined
td
| 可以给每一个输入框单独设定出错消息,仍然是通过输入框的name来指定,出错消息可以是一个字符串或者回调函数。
br
| 比如:
br
| messages: { email: "亲,请输入你的邮箱"}
br
| 表示name为email的输入框出错后,总是显示"亲,请输入你的邮箱"。
br
| 如果想分别设定未填写和填写错误的消息,则可以传入一个数组,数组中第一个元素是未填写的出错消息,第二个元素是填写错误的出错消息。
br
| 比如:
br
| messages: { email: ["请填写您的邮箱", "亲,请输入你的邮箱"]}
tr
td highlight
td
| highlight: function($input, $error, inputErrorClass) {
| $input.addClass(inputErrorClass)
| $error.show()
| }
td
| 高亮显示错误。
tr
td unhighlight
td
| unhighlight: function($input, $error, inputErrorClass) {
| $input.removeClass(inputErrorClass)
| $error.hide()
| }
td
| 取消高亮显示错误。
tr
td success
td
| success: function(){$form} {}
td
| 当用户提交表单且没有错误发生时调用此方法。如果返回值为false,则会阻止表单的默认提交行为。
tr
td fail
td
| fail: function(){$errorInputs, $form} {}
td
| 当用户提交表单且有错误发生时调用此方法。
h4 三,配置规则
p
| 有两种方法可以配置规则:直接在html中写 <code>data-rules</code>或者在初始化validate时传入rules对象。
br
| 后配置的规则总是会覆盖先配置的规则,所以js中配置的规则也总是会覆盖在html中配置的规则。
div.tab-pane#api5
table.sui-table
thead
tr
th 方法
th 示例
th 说明
tbody
tr
td $.fn.validate(config)
td $('#my-form').validate()
td
| 启用表单校验,config详情见"文档"
tr
td showError
td $('#my-form').validate("showError", "email", "邮箱填错啦", "myEmailError")
td
| 显示一个错误,其中四个参数分别是("showError", "输入框的name", "要显示的错误消息", "可选,该错误消息的名称,用来在hideError的时候引用")
tr
td hideError
td $('#my-form').validate("hideError", "email", "myEmailError")
td
| 隐藏一个错误消息,其中三个参数分别是("hideError", "输入框的name,不填则隐藏所有的错误消息", "可选,要隐藏的错误消息的名称(在showError时指定的,或者就是规则名称),如果不填则会影藏该输入框对应的所有错误消息")
tr
td enable/disable
td $('#my-form').validate("enable/disable")
td
| 启用/禁用表单校验
tr
td
$.validate.setRule(name, method, msg)
td
|var mobile = function(value, element, param) {
| return (/^0?1[3|4|5|7|8][0-9]\d{8,9}$/).test(trim(value));
|};
|Validate.setRule("mobile", mobile, '请填写正确的手机号码');
td
| 设置一条自定义规则,如果该规则已经存在则直接覆盖。 其中三个参数分别是:
ul
li name,规则名称
li method, 规则方法,该方法返回值为true则表示没有错误,返回值为false则表示有错误。
li
| msg, 出错提示文案,可以是一个字符串,也可是一个函数。
br
| 如果是函数,则会调用函数并显示函数的返回值。并且调用函数的时候会传第一个参数就是出错的input。
br
| 如果是字符串,则可以用 $0 变量来表示该规则的值,比如 <code>data-rules='match=pwssword'</code>,则 $0 就是 password
tr
td $.validate.setMsg(ruleName, msg)
td $.validate.setMsg('required', '亲,不要忘了填哦')
td
| 自定义错误消息,其中msg参数和setRule中的msg参数一样既可以是字符串,也可以是函数。
div.tab-pane#event5
h4 事件
table.sui-table
tr
th 事件
th 说明
tr
td update
td 在输入框上手动触发这个事件,会立刻执行一次校验
tr
td highlight
td 高亮一个错误时会在输入框上触发此事件
tr
td unhighlight
td 取消高亮一个错误时会在输入框上触发此事件
h2 自定义错误消息
p
| 错误消息可以非常灵活进行定制。错误消息有两种情况:
p
| 1. 没有给输入框指定错误消息,则会默认用对应出错规则的错误消息。每一个规则都有自己的错误消息,可以通过重载来改变一个规则的默认消息。如果一个输入框没有定义自己的错误消息,则会显示出错规则的错误消息。比如你定义了data-rules='required|email',但是用户输入的邮箱不合法,则显示的错误消息是email默认的消息"请填写正确的email地址".
p
| 2. 给输入框设定了错误消息,则会直接用设定的错误消息,而不会用出错规则对应的消息。
p 有两种方式可以定义错误消息:
p 1. 在html中通过 <code>data-error-msg</code> 和 <code>data-empty-msg</code>来分别定义填写错误和未填写的错误消息。如果没有定义 <code>data-empty-msg</code>,则用户未填写的时候会显示required规则对应的错误消息。
p 2. 在JS中通过 messages 来配置错误消息。比如: <code>messages: { email: "邮箱不合法"}</code>,当用户填写错误邮箱时会显示"邮箱不合法"。也可以设置一个数组,分别表示未填写和填写错误时的出错消息,比如<code>messages: { email: ["请填写邮箱", "邮箱不合法a]"}</code>。
br
js中设置messages请参考js文档。
ul.sui-nav.nav-tabs.nav-large
li.active
a(href='#demo-msg', data-toggle='tab') 示例
li
a(href='#code-msg', data-toggle='tab') 代码
div.tab-content
div.tab-pane.active#demo-msg
div.bs-docs-example
form.sui-form.form-horizontal#form-msg
div.control-group
label.control-label(for="inputEmail") 邮箱:
div.controls
input(type="text" id="inputEmail" name='email' placeholder="邮箱" data-rules='required|email')
div.control-group
label.control-label(for="inputPassword") 密码:
div.controls
input(type="password" id="inputPassword" name='password' placeholder="密码" title='密码' data-rules='required|minlength=6|maxlength=12')
div.control-group
label.control-label(for="inputNick") 昵称:
div.controls
input(type="text" id="inputNick" name='nick' placeholder="昵称" data-rules='required|minlength=2|maxlength=6' data-error-msg='昵称必须是2-6位' data-empty-msg='亲,昵称别忘记填了')
div.control-group
label.control-label(for="sanwei")
div.controls
button.sui-btn.btn-primary(type="submit") 立即注册
script.
$("#form-msg").validate({
messages: {
email: ["亲,你还没填邮箱呢", "邮箱不要瞎填哦"],
password: "亲,密码必须是6-12位哦"
}
})
div.tab-pane#code-msg
pre.prettyprint.linenums(data-target='#demo-msg>div')
h2 手动显示/隐藏错误消息
p.sui-lead
| 有时候你可能需要手动操作错误消息,我们提供了 showError 和 hideError 接口可以使用。具体的参数说明见API说明
ul.sui-nav.nav-tabs.nav-large
li.active
a(href='#demo-showerror', data-toggle='tab') 示例
li
a(href='#code-showerror', data-toggle='tab') 代码
div.tab-content
div.tab-pane.active#demo-showerror
div.bs-docs-example
form.sui-form.form-horizontal.sui-validate#form-showerror
div.control-group
label.control-label(for="inputEmail") 邮箱:
div.controls
input(type="text" name='email' placeholder="邮箱" data-rules='required|email')
div.control-group
label.control-label(for="inputPassword") 密码:
div.controls
input(type="password" name='password' placeholder="密码" title='密码' data-rules='required|minlength=6|maxlength=12')
div.control-group
label.control-label(for="inputNick") 昵称:
div.controls
input(type="text" name='nick' placeholder="昵称" data-rules='required|minlength=2|maxlength=6')
div.control-group
label.control-label(for="sanwei")
div.controls
button.sui-btn.btn-primary(type="submit") 立即注册
div
a#show-email-error.sui-btn.btn-primary(href='javascript:void(0);') 显示邮箱自定义错误
a#hide-email-error.sui-btn.btn-primary(href='javascript:void(0);') 隐藏邮箱自定义错误
a#hide-email-all-error.sui-btn.btn-primary(href='javascript:void(0);') 隐藏邮箱全部错误
a#hide-all-error.sui-btn.btn-primary(href='javascript:void(0);') 隐藏所有错误
script.
(function() {
var $form = $("#form-showerror");
$("#show-email-error").click(function() {
$form.validate("showError", "email", "你的邮箱填错啦", "myerror");
});
$("#hide-email-error").click(function() {
$form.validate("hideError", "email", "myerror");
});
$("#hide-email-all-error").click(function() {
$form.validate("hideError", "email");
});
$("#hide-all-error").click(function() {
$form.validate("hideError");
});
})()
div.tab-pane#code-showerror
pre.prettyprint.linenums(data-target='#demo-showerror>div')
h2 内置校验规则
p.sui-lead
| 校验器内置了一些常用的规则,包括手机号码、email、数字、长度限制等。
br
| 校验规则可以带参数,而且参数可以是一个函数。比如minlength的值可以是一个数字也可以是一个函数,如果是函数,则会使用此函数的返回值作为规则值。
ul.sui-nav.nav-tabs.nav-large
li.active
a(href='#demo2', data-toggle='tab') 示例
li
a(href='#code2', data-toggle='tab') 代码
li
a(href='#doc2', data-toggle='tab') 内置校验规则
div.tab-content
div.tab-pane.active#demo2
div.bs-docs-example
form.sui-form.form-horizontal.sui-validate
div.control-group
label.control-label(for="name") 姓名:
div.controls
input(type="text" id="name" placeholder="required" data-rules='required' name='name')
div.control-group
label.control-label(for="email") 邮箱:
div.controls
input(type="text" id="email" placeholder="email" data-rules='required|email' name='email')
div.control-group
label.control-label(for="password") 密码:
div.controls
input(type="password" id="password" placeholder="required" data-rules='required|minlength=8|maxlength=16' name='password')
div.control-group
label.control-label(for="repassword") 重复密码:
div.controls
input(type="password" id="repassword" placeholder="match" data-rules='required|match=password' name='repassword')
div.control-group
label.control-label(for="tel") 座机号码:
div.controls
input(type="text" id="tel" placeholder="tel" data-rules='required|tel' name='tel')
div.control-group
label.control-label(for="mobile") 手机号码:
div.controls
input(type="text" id="mobile" placeholder="mobild" data-rules='required|mobile' name='mobile')
div.control-group
label.control-label(for="zip") 邮编:
div.controls
input(type="text" id="zip" placeholder="zip" data-rules='required|zip' name='zip')
div.control-group
label.control-label(for="date") 出生年月日:
div.controls
input(type="text" id="date" placeholder="date" data-rules='required|date' name='date' data-toggle='datepicker')
div.control-group
label.control-label(for="time") 睡觉时间:
div.controls
input(type="text" id="time" placeholder="time" data-rules='required|time' name='time' data-toggle='timepicker')
div.control-group
label.control-label(for="datetime") 日期加时间:
div.controls
input(type="text" id="datetime" placeholder="datetime" data-rules='required|datetime' name='datetime' data-toggle='datepicker' data-date-timepicker='true')
div.control-group
label.control-label(for="age") 年龄:
div.controls
input(type="text" id="age" placeholder="digits" data-rules='required|digits' name='age')
div.control-group
label.control-label(for="url") 个人网址(选填):
div.controls
input(type="text" id="url" placeholder="url" data-rules='url' name='url')
div.control-group
label.control-label()
div.controls
button.sui-btn.btn-primary.btn-large(type="submit") 注册
div.tab-pane#code2
pre.prettyprint.linenums(data-target='#demo2>div')
div.tab-pane#doc2
h4 内置校验规则包括这些
table.sui-table.table-bordered
tr
th 名称
th 内容
tr
td required
td 必填,不能为空
tr
td prefill
td 必须先填写另一个输入框,规则值为另一个输入框的name属性
tr
td match
td 和另一个输入框的值保持一致
tr
td number
td 数字
tr
td digits
td 整数
tr
td mobile
td 手机号码
tr
td tel
td 座机号码,包括区号
tr
td email
td email地址
tr
td zip
td 邮编
tr
td date
td 日期,例如 2012-02-02
tr
td time
td 时间,精确到分钟,例如 05:30
tr
td datetime
td 日期加时间,例如 2012-02-02 05:30
tr
td url
td 网址,协议是可选的
tr
td minlength
td 最小长度
tr
td maxlength
td 最大长度
h2 编写插件
p.sui-lead
| 表单校验组件提供了常用的校验规则,并且你还可以非常方便地通过插件添加自定义的规则。
ul.sui-nav.nav-tabs.nav-large
li.active
a(href='#code3', data-toggle='tab') 代码示例
li
a(href='#doc3', data-toggle='tab') 文档
div.tab-content
div.tab-pane#demo3
div.bs-docs-example.
//添加required规则
var required = function(value, element, param) {
return trim(value);
};
$.validate.setRule("required", required, function ($input) {
var tagName = $input[0].tagName.toUpperCase();
var type = $input[0].type.toUpperCase();
if ( type == 'CHECKBOX' || type == 'RADIO' || tagName == 'SELECT') {
return '请选择'
}
return '请填写'
});
//添加match规则
var match = function(value, element, param) {
value = trim(value);
return value == $(element).parents('form').find("[name='"+param+"']").val()
};
$.validate.setRule("match", match, '必须与$0相同');
div.tab-pane.active#code3
pre.prettyprint.linenums(data-target='#demo3>div')
div.tab-pane#doc3
|通过<code>$.validate.setRule</code>可以添加自定义规则。
br
br
|setRule 方法有三个参数:
ul
li name, 规则名
li method, 规则方法,该方法的返回值为布尔类型,表示是否发生错误,比如返回true则表示没有发生错误。
li msg,错误消息,可以是字符串,也可以是函数,如果是函数则调用函数并显示函数的返回值,并且在调用函数的时候会传入一个参数就是当前的输入框。具体参加api说明
br
|规则函数也有三个参数:
ul
li value,当前输入值
li element,当前输入框
li param,当前规则值,比如 <code>data-rules="match=password"</code>,则param就是password