以前做唯一性验证,在得到远程校验结果之后,手动弹出提示框提示重复与否。
而且,而且,不能把校验策略写死在JSP里面:validType=remote['url'],如果这样写,修改的时候又不能避免 oldvalue 的校验,结果就是 aa 改成 ab,又改回来aa,告诉你该项已重复!实际什么都没改
正题:
1 定义模板校验规则(这个可以放进自己的core.js,不用每个页面都写一次):
$.extend($.fn.validatebox.defaults.rules, {
/**
* 调用自定义的方法校验模板
* 使用方式: validType=call[fn]
* @type
*/
call: {
validator: function(value, param){
// value是被校验的控件的值
// 取出页面传入用来校验的方法
var callback = param[0];
if(callback){
// 回调
return callback(value);
}
return false;
},
// 显示校验错误信息
message: '{1}'
}
});
2 自定义校验方法
以下是我的编码唯一性校验:
/**
* 编码唯一性校验
*
* 返回true表示校验通过,返回false表示校验失败
*/
function codeValidate(code){
var result = true;
// 这里做业务逻辑判断, 比如判断是否需要验证等等,我的这里是oldvalue不需要校验
// 以下是我的远程唯一校验,ajax一定要同步执行
$.ajax({
async: false,
url : 'myurl',
data : {
code : code
},
success : function(res) {
result = res;
}
});
// 这里的result只有2个值:true / false
return result;
}
3 页面设置调用
我的input文本框设置:
<input class="easyui-textbox" name="code" data-options="required:true" validType="call[codeValidate]" invalidMessage="编码重复,请重新输入" ></input>
4 提交之前,把这个input所在的form校验一下就行了,这样对于比较复杂的校验,只需要写一个校验的方法,然后在页面配置validType即可,是不是很省心呢