当我们使用jquery.validate作为前端验证的插件的时候,需要注意两个容易出错的地方,会导致你写的规则不起作用
1.jquery.validate引入依赖js的顺序
jquery.validate依赖jquery.min.js,jquery.validate.min.js,messages_zh.min.js三个主要包,这里注意要先引入jquery.min.js,然后再引入后面的两个js,因为后面的两个js里,大部分方法依赖于jquery.min.js,所以要先引入jquery.min.js,否则jquery.validate里的方法会因为报错,而不起作用
2.提交表单的按钮,是否在form表单的里面
2.1 当你提交表单的按钮在form表单的里面的时候,正常写了下面的规则
$
("#job-add-form").validate({
rules
:{
beanName
:{
required
:true
},
methodName
:{
required
:true,
},
cronExpression
:{
required
:true,
}
},
messages
:{
beanName
:{
required
:"必填项"
},
methodName
:{
required
:"必填项",
},
cronExpression
:{
required
:"必填项",
}
}
});
能够出现正常的下面验证显示信息
2.1 当你提交表单的按钮在form表单的外面的时候,会发现上面的规则就失效了,页面上也显示不出验证信息
这个时候你需要在外面按钮的点击事件里调用jquery.validate.min.js里的valid()方法才能使验证生效 var flag = $jobAddForm.valid();判断验证是否通过 通过会为true,再去执行提交的操作即可,不通过的时候上面的验证信息也会显示出来
3.jquery.validate详细使用
3.1选择器
:blank –选择所有值为空的元素
:filled – 选择所有值不为空的元素
:unchecked –选择所有未被选中的元素
3.2校验方法
validate() – 对选中的表单进行校验
valid() – 判断选中的表单或元素输入的内容是否有效
rules() – 获取、添加或者移除元素的规则
$
("#beanName").rules("remove");
$
("#beanName").rules("add", {
required
: true,
max
: 100,
min
: 10
});
$
("#beanName").rules("remove", "min max");
3.3Validator对象使用
调用 validate() 方法将会返回一个 Validator 对象,该对象提供了很多方法,下面是其中比较常用的一些方法。
Validator.form() – 校验表单
Validator.element() – 校验元素
Validator.resetForm() – 重置表单
Validator.showErrors() – 显示指定的错误信息
Validator.numberOfInvalids() – 显示无效的项目数量
Validator.destroy() –销毁Validator对象
jQuery.validator.addMethod() – 添加一个自定义的校验方法
jQuery.validator.format() – 使用参数替换掉 {n} 占位符
jQuery.validator.setDefaults() – 修改校验器的默认选项
jQuery.validator.addClassRules() – 为某一类元素添加校验规则
3.4规则名称
required Boolean 设置该项内容为必填 remote Json|String 请求远程资源来校验内容有效性 minlength Number 设置内容的最少字符长度 maxlength Number 设置内容的最多字符长度 rangelength Array 设置内容的字符长度范围 min Number 设置内容的最小允许值 max Number 设置内容的最大允许值 range Array 设置内容的允许值范围 step Number 设置内容为某一固定值的倍数 email Boolean 设置该项内容为一个有效邮箱地址 url Boolean 设置该项内容为一个有效网址 date Boolean 设置该项内容为日期格式 dateISO Boolean 设置该项内容为ISO日期格式 number Boolean 设置该项内容为十进制小数 digits Boolean 设置该项内容为十进制整数 equalTo Selector 设置该项内容与指定元素内容相同 accept String 设置上传文件所接受的 MIME 类型 creditcard Boolean 设置该项内容为一个信用卡卡号 extension String 设置上传文件所接受的扩展名 phoneUS Boolean 设置该项内容为一个美国电话号码 require_from_group Array 设置同一组至少填写多少项
3.5应用
3.5.1.validate()方法应用
var validator
= $
("#job_add_form").validate();
validator
.element("#beanName");
validator
.showErrors({
"beanName": "该内容不能为空"
});
validator
.form();
console
.log(validator
.numberOfInvalids() + " 个字段无效");
validator
.resetForm();
validator
.destroy();
2.简单用户注册应用
$
("#addUserInfo").validate({
rules
: {
username
: {
required
: true,
minlength
: 2,
remote
: {
url
: "userManage/username",
type
: "post",
dataType
: "json",
data
: {
username
: function
() {
return $
("#username").val();
}
},
dataFilter
: function
(data
, type
) {
if (data
== "true")
return true;
else
return false;
}
}
},
password
: {
required
: true,
minlength
: 5
},
confirmpassword
: {
required
: true,
minlength
: 5,
equalTo
:"#password"
},
mobile
: {
required
: true,
minlength
: 5,
},
},
messages
: {
username
: {
required
: "请输入用户名",
minlength
: "用户名必需由两个字母组成",
remote
:"输入的用户名已经存在"
},
password
: {
required
: "请输入密码",
minlength
: "密码长度不能小于 5 个字母"
},
confirmpassword
: {
required
: "请输入密码",
minlength
: "密码长度不能小于 5 个字母",
equalTo
:"两次输入密码不一致"
},
mobile
: {
required
: "请输入手机号",
minlength
: "手机号长度不能小于 5 个字母"
},
}
});
3.jQuery.validator应用
jQuery
.validator
.addMethod("test",
function(value
, element
, params
) {
return this.optional(element
) || value
== result
;
},
jQuery
.validator
.format("用户名至少需填写{0}个字符"));
jQuery
.validator
.addClassRules("test_class", {
required
: true,
test
: [0, 'test_class',0]
});
jQuery
.validator
.setDefaults({
debug
: true,
onsubmit
: true,
focusInvalid
: true,
focusCleanup
: true,
ignore
: ".ignore",
ignoreTitle
: true,
errorClass
: "invalid",
validClass
: "valid",
errorElement
: "em",
wrapper
: "li",
errorLabelContainer
: "#error_messages ul",
errorContainer
: "#error_messages, #error_container",
showErrors
: function(errorMap
, errorList
) {
$
("#error_tips").html("Your form contains " + this.numberOfInvalids() + " errors, see details below.");
this.defaultShowErrors();
},
errorPlacement
: function(error
, element
) {
element
.before(error
)可以直接用element来指定,把错误信息放在验证的元素前面。
},
success
: function(label
, element
) {
console
.log(label
);
console
.log(element
);
label
.addClass("valid").text("Ok!")
},
highlight
: function(element
, errorClass
, validClass
) {
$
(element
).addClass(errorClass
).removeClass(validClass
);
$
(element
.form
).find("label[for=" + element
.id
+ "]").addClass(errorClass
);
},
unhighlight
: function(element
, errorClass
, validClass
) {
$
(element
).removeClass(errorClass
).addClass(validClass
);
$
(element
.form
).find("label[for=" + element
.id
+ "]").removeClass(errorClass
);
},
submitHandler
: function(form
, event
) {
console
.log($
(form
).attr("id"));
},
invalidHandler
: function(event
, validator
) {
var errors
= validator
.numberOfInvalids();
if (errors
) {
var message
= errors
== 1 ? 'You missed 1 field. It has been highlighted': 'You missed ' + errors
+ ' fields. They have been highlighted';
console
.log(message
);
}
}
});
4.大部分规则名称整合运用
$
("#example_form").validate({
rules
: {
name
: {
required
: true,
minlength
: 2,
maxlength
: 24
},
age
: {
required
: true,
rangelength
: [1, 3],
min
: 10
},
birthday
: {
required
: true,
date
:true,
},
card
: {
required
: {
depends
: function(element
) {
return $
("#user_age").val() >= 18;
}
},
creditcard
: true
},
salary
: {
required
: true,
step
: {
param
: 100,
depends
: function(element
) {
return $
("#user_age").val() >= 28;
}
}
},
prove
: {
required
: function(element
) {
return $
("#user_age").val() >= 18;
},
extension
: "xls|csv|doc"
},
phone
: {
require_from_group
: [1, ".phone_group"],
phoneUS
: true
},
mobile
: {
require_from_group
: [1, ".phone_group"]
},
image
: {
required
: true,
accept
: "image/*"
},
home
: {
required
: true,
url
: true,
// 校验之前对内容进行处理
normalizer
: function(element
) {
var url
= $
.trim($
(element
).val());
// 检查不是以 http
:// or https
:// or ftp
:// 开头的网址
if (url
&& url
.substr(0, 7) !== "http://" && url
.substr(0, 8) !== "https://" && url
.substr(0, 6) !== "ftp://") {
// 拼接上 http
://
url
= "http://" + url
;
}
return url
;
},
// 失去焦点时进行校验
onfocusout
: function(element
, event
) {
console
.log(element
);
},
onkeyup
: function(element
, event
) {
console
.log(element
);
},
onclick
: function(element
, event
) {
console
.log(element
);
}
},
password
: {
required
: true,
minlength
: 6
},
repassword
: {
required
: true,
//与password的值判断是否相等
equalTo
: "#password"
},
email
: {
required
: "#send_to_me:checked",
email
: true,
//发送异步请求
remote
: {
url
: "http://localhost:8080/check/register",
type
: "post",
dataType
: "json",
data
: {
email
: $
("#user_email").val()
}
}
},
//自定义错误提示信息
messages
: {
name
: {
required
: "请输入用户名",
minlength
: jQuery
.validator
.format("用户名至少需填写{0}个字符"),
maxlength
: jQuery
.validator
.format("用户名最多填写{0}个字符")
}
},
});