内容目录
jQuery Validator实现了非常强大的错误提示信息功能。默认情况下,你无需定义任何的错误提示信息,jQuery Validator就能自动完成所有的错误提示信息。
当然,jQuery Validator也支持你使用setMessage()
方法自定义错误提示信息。下面我们来介绍jQuery Validator的错误提示消息生成机制。
语法
jQuery Validator 1.0 新增。setMessage()
方法支持以下两种用法:
用法一:一次定义单个提示信息。
setMessage(key, msg, global)
用法二:一次定义多个提示信息。
setMessage(msgs, global)
参数
参数 | 描述 |
---|---|
key | String类型提示信息的索引键值。 |
msg | String/Function类型指定的提示信息字符串,或者动态返回提示信息字符串的函数。 |
msgs | Object类型以多个key:msg的形式,同时定义多个提示信息。 |
global | 可选/Boolean类型指示定义的提示信息是否为全局提示信息。如果是全局信息,则所有实例均可使用;否则只有当前实例可以使用。该值默认为false。 |
参数 msg
参数msg
可以是一个字符串,也可以是一个返回字符串的函数。此外,如果它为特殊值false
,则表示不进行错误渲染(即不提示错误信息)。
如果msg
是一个函数,则jQuery Validator在调用时,会为其传入如下参数:
function(context){
// context 本次校验的上下文对象
// this 指向全局window对象
}
参数msg
的提示信息还支持占位符(函数返回的提示信息也同样支持),jQuery Validator会自动解析占位符并替换为相应的文本内容。其支持的占位符如下:
{property}:property可以是上下文对象context的任意属性。例如:{label}、{expected}。
{#id}:id可以是页面上任意表单元素的id属性值,jQuery Validator会将其替换为该表单元素的label文本。
{$name}:name可以是页面上任意表单元素的name属性值,jQuery Validator会将其替换为该表单元素的label文本。
{#index}或{$index}:index是上下文对象context的属性$relatedDoms的数组索引,jQuery Validator会将其替换为该表单元素的label文本。
参数 key
参数key
用于指定在什么情况下显示对应的提示信息。它可以是以下组成(优先级依次从高到低):
validator + "." + trigger
validtor + "." + child (如果存在child)
validator
trigger
以上的validator、trigger、child、trigger均是上下文对象context的属性。
当jQuery Validator 校验不通过时,如果当前上下文对象context的属性满足上述任一条件,则会提示对应的错误信息(优先提示优先级较高的信息)。
作为jQuery Validator的原型方法,setMessage()
一般在实例上调用。不过考虑到预定义全局提示信息时,可能还没有创建任何实例,因此setMessage()
也支持直接在原型上直接调用,即:V.fn.setMessage(),此时无论global参数是省略还是其他任意值,都会被视为true,从而将其定义为全局提示信息。
如果没有特殊需要,建议尽量将提示信息统一定义到全局上。
校验规则内的message属性
除了使用setMessage()
预定义错误提示信息外,jQuery Validator还支持你在定义校验规则中通过message属性动态定义仅用于该校验规则的提示信息。如果message属性是字符串,表示只要该规则校验不通过,一律提示该信息字符串;如果message属性是对象,请参照参数msg的说明;如果message为false,则表示不进行错误渲染。
v.define("beginTime", {
format: "date",
compare: "this < now",
message: "{label}必须小于当前时间" // 任何错误均提示该信息
});
v.define("endTime", {
format: "date",
compare: "this > now",
message: {
compare: "{label}必须大于当前时间" // 只有compare校验器校验失败提示该信息
// 其他校验失败,均沿用相应设置
}
});
上下文对象context的message属性
此外,为了便于开发人员对jQuery Validator进行二次开发时,能够实现一些特殊的校验提示需求,开发人员可以设置context对象的message属性,其用法与规则对象中的message属性用法相同,但context.message具有最高的优先级。
示例&说明
我们可以通过jQuery Validator内置的提示信息来进行说明:
// 全局消息配置
V.fn.messages = {
"required": "{label}不能为空!",
// 示例:required:true ( validator为required )
// 当输入为空时提示该信息
"required.checked": "请先选择{label}!",
// required:true ( validator为required )
// 当前表单元素是复选框/单选框,且没有选中时,trigger为"checked",提示该信息
"equalsTo": "{label}必须与{#0}输入一致!",
// equalsTo:"#password" ( validator为equalsTo )
// 当前表单输入不等于#password的输入时,提示该信息
"==": "{label}必须等于{expected}!",
// range:"[10]" ( validator为range )
// 表单输入不等于10时,trigger为"==",提示该信息
">=": "{label}必须大于或等于{expected}!",
// range:"[18,100]" ( validator为range )
// 表单输入不满足大于等于18时,trigger为">=",expected为18,提示该信息
">": "{label}必须大于{expected}!",
// range:"(18,100]" ( validator为range )
// 表单输入不满足大于18时,trigger为">",expected为18,提示该信息
"<=": "{label}必须小于或等于{expected}!",
// range:"[18,100]" ( validator为range )
// 表单输入不满足小于等于100时,trigger为"<=",expected为100,提示该信息
"<": "{label}必须小于{expected}!",
// range:"[18,100)" ( validator为range )
// 表单输入不满足小于100时,trigger为"<",expected为100,提示该信息
"length.==": "{label}的长度必须等于{expected}!",
// length:"[18]" ( validator为length )
// 表单输入长度不等于18时,trigger为"==",提示该信息
"length.>=": "{label}的长度必须大于或等于{expected}!",
// length:"[6,16]" ( validator为length )
// 表单输入长度不满足大于等于6时,trigger为">=",expected为6,提示该信息
"length.>": "{label}的长度必须大于{expected}!",
// length:"(6,16]" ( validator为length )
// 表单输入长度不满足大于6时,trigger为">",expected为6,提示该信息
"length.<=": "{label}的长度必须小于或等于{expected}!",
// length:"[6,16]" ( validator为length )
// 表单输入长度不满足小于等于16时,trigger为"<=",expected为16,提示该信息
"length.<": "{label}的长度必须小于{expected}!",
// length:"[6,16)" ( validator为length )
// 表单输入长度不满足小于16时,trigger为"<",expected为16,提示该信息
"format.number": "{label}必须是有效的整数!",
// format:"number" ( validator为format )
// 表单输入不是整数时,child为"number",trigger为"number",提示该信息
"format.number/money": "{label}必须是整数或最多保留两位的小数!",
// format:"number/money" ( validator为format )
// 表单输入不是整数或保留两位以内的小数时,child为"number",trigger为"number/money",提示该信息
"format.number/double": "{label}必须是有效的整数或小数!",
// format:"number/double" ( validator为format )
// 表单输入不是整数或保留两位以内的小数时,child为"number",trigger为"number/double",提示该信息
"format.date": '{label}必须为"{dateFormat}"格式的有效时间!',
// format:"date/datetime" ( validator为format )
// 表单输入不是"yyyy-MM-dd HH:mm:ss"格式时,child为"date",trigger为"date/datetime",提示该信息
"file": "{label}的格式不正确,必须为{expected}等格式!",
// file: true ( validator为file )
// 表单输入不是指定文件格式时,trigger为"file",提示该信息
"default":"{label}的格式不正确!"
// 如果找不到对应的提示信息,默认提示该信息
};
下面我们来看一个具体的示例:运行代码
var v = new V(); // 创建一个jQuery Validator实例对象
// 为当前实例自定义required校验器的错误提示
v.setMessage("required", "我是非空校验的自定义提示");
// 为全局(所有实例)自定义length校验器trigger为"=="时的错误提示
v.setMessage("length.>=", "当前是{validator}校验器,{label}的长度必须大于等于{expected}位", true);
// 为当前实例一次性自定义多个错误提示
v.setMessage({
"range.>": "自定义:{label}必须大于{expected}",
"length.<=": "自定义:{label}的字符位数必须小于等于{expected}"
});
// 为全局(所有实例)定义错误提示
V.fn.setMessage({
"format.number/money": "请输入有效的金额"
});
0 条评论
撰写评论