# 胖模式搜索框支持校验限制
# 背景
胖模式的校验架构是使用的jQuery的Validator插件,要使用的话需要先写一个表单,然后使用封装好的APF.addValidate
去给该表单加上校验。
原先搜索框是都没有做校验的,如果按之前那套,一个页面存在多表单时会有bug,且用起来改动也比较大,所以打算另外封装一套支持单独配置的搜索框校验功能。
# 实现
# 使用方式
APF.bindInputValid({
$element: me.ui.search,
validMethod: ['ip_v6', 'mac'],
msg: 'xxx',
callback: function () {
me.searchKey();
}
});
只需传入需要绑定校验的元素、所需做的校验(注意这里沿用了之前写好的jq的校验)、可选的提示语(不传时使用原jq中写好的)、校验成功的回调函数,使用起来很方便。
之前通常都是在每个页面手写监听输入的回调,现在集成到bindInputValid中,使用者也无需写麻烦的监听函数了。
# 原理
# 监听状态
监听传入元素的按键状态,是enter时触发校验,校验成功才触发回调
同时监听值的变化状态,变化时也触发校验,保证用户能第一时间看到错误状态及信息。
# 校验
根据传入的校验方法名,挨个调用jQuery.validator.methods
中原先已定义好的校验函数,避免又要整一套校验。
同时构造了假的上下文,避免原校验函数中的缺失对象的报错(只需走正则,不需要走框架的其它功能)
// 构造上下文,避免报错
var _this = {
optional: function () {
return false;
}
}
jQuery.validator.methods[validMethod[i]].call(_this, val)
# 错误显示
如果校验失败,自动给传入的元素添加上customTip提示语,并调用系统中已有的悬浮提示功能组件,监听输入框的悬浮事件,在悬浮时显示配置在customTip字段的提示语。
并添加一个新的css类,用于控制样式变红
同样,校验成功时需移除上述内容
# 效果
# 总结
通过封装,可以快速的给单独的输入框添加上校验功能,提升开发效率。