这个插件主要是为了解决vee-validata在使用中没有有验证的地方要单独去写不少验证样式的标签以及一些不方便实现的一些验证的样式 好比这样子:前端
/插件源码*/
/**promise
*/app
import zh from 'vee-validate/dist/locale/zh_CN';
import { Validator } from 'vee-validate'
Validator.localize('zh',zh);
const isPhone = {dom
getMessage:(field, params, data) => { return field + '格式错误'; }, validate: value => { if(value==undefined){ value='' } return value.length == 11 && /^((13|14|15|17|18)[0-9]{1}\d{8})$/.test(value) }
}
const isPassword ={ui
getMessage:(field, params, data) => { return field + '密码6-16位,不包含特殊字符,能够是数字或者字母'; }, validate: value => { if(value==undefined){ value='' } return value == value && value.length > 5; }
}this
const isEmail ={spa
getMessage:(field, params, data) => { return field + '格式错误'; }, validate: value => { if(value==undefined){ value='' } return value == value && /^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/.test(value); }
}prototype
Validator.extend('password', isPassword);
Validator.extend('phone', isPhone);
Validator.extend('email', isEmail);插件
Validator.localize({code
zh: { messages: { required: function (name) { return name + '不能为空' }, }, attributes: { phone: '手机号', password:'密码', email:'邮箱' } }
})
const validator = new Validator({
phone: 'required|phone', password: 'required|password', email:'required|email',
});
/**
*/
const FishVer = function(){
this.init = function(verArr,callback,id){ verArr.forEach((el,index)=>{ var inputDom = getElementByAttr('form-control','name',el.name,id); inputDom.forEach((eldom,ind)=>{ eldom.addEventListener('input',(event,e)=>{ regValue(el,eldom).then(res=>{ verArr[index].ver = res callback(checkVerAll(verArr)) }) }) }) }) }
}
/**
*/
FishVer.prototype.fishVerAll = function(verArr,callback,id){
let promises = []; for(let i=0;i<verArr.length;i++){ var inputDom = getElementByAttr('form-control','name',verArr[i].name,id); promises.push(regValue(verArr[i],inputDom[0])) } return Promise.all(promises).then(res=>{ callback(checkVerArrAll(res)) })
}
/**
*/
function checkVerAll(value){
let isAll = false; for(let i=0;i<value.length;i++){ if(value[i].ver){ isAll = true; continue; }else{ isAll = false; break; } } return isAll;
}
/**
*/
function checkVerArrAll(value){
let isAll = false; for(let i=0;i<value.length;i++){ if(value[i]){ isAll = true; continue; }else{ isAll = false; break; } } return isAll;
}
/**
*/
function getElementByAttr(tag, dataAttr, reg,id) {
var idEle = document.getElementById(id); var aElements = idEle.getElementsByClassName(tag); var aEle = []; for(var i = 0; i < aElements.length; i++) { var ele = aElements[i].getAttribute(dataAttr); if(ele == reg) { aEle.push(aElements[i]); } } return aEle;
}
function regValue(el,inputDom){
return new Promise((resolve,reject)=>{ validator.validate(el.name,inputDom.value).then((res)=>{ let inputDomFather = inputDom.parentNode; let hasError = inputDomFather.getElementsByClassName('ver_error'); if(validator.errors.has(el.name)){ //若是验证不经过 removeClass(inputDom,'ver_success'); removeClass(inputDom,'ver_fail'); addClass(inputDom,'ver_fail'); removeClass(inputDomFather,'ver_box_success'); removeClass(inputDomFather,'ver_box_fail') addClass(inputDomFather,'ver_box_fail'); if(hasError.length){ hasError[0].innerHTML = validator.errors.first(el.name); }else{ let errorTemp = document.createElement('span'); errorTemp.className = 'ver_error'; errorTemp.innerHTML = validator.errors.first(el.name); inputDomFather.append(errorTemp); } resolve(false) }else{ if(hasError.length){ inputDomFather.removeChild(hasError[0]); } removeClass(inputDom,'ver_fail'); removeClass(inputDom,'ver_success'); addClass(inputDom,'ver_success'); removeClass(inputDomFather,'ver_box_fail'); removeClass(inputDomFather,'ver_box_success'); addClass(inputDomFather,'ver_box_success'); resolve(true) } }).catch(err=>{ console.log(err) }) })
}
function addClass(obj,cls) {
var obj_class=obj.className, blank = ( obj_class != '' ) ? ' ' : ''; let added = obj_class + blank + cls; obj.className = added;
}
function removeClass(obj,classname){
//若是原来有class if(obj.className!=""){ var arrClassName=obj.className.split(" "); var _index=arrIndexOf(arrClassName,classname); //若是有须要移除的class if(_index!=-1){ arrClassName.splice(_index,1); obj.className=arrClassName.join(" "); } } //若是原来没有class无操做
}
function arrIndexOf(arr,v){
for(var i=0;i<arr.length;i++){ if(arr[i]==v){ return i; } } return -1;
}
const fishVer = new FishVer();
export default fishVer;
/插件源码*/
/*调用插件/
fishVer.init([
{name:'password'}
],(res)=>{
console.log(res)
},'logver')
<input type="password" name="password" class="form-control form-block" v-model="login_pwd" placeholder="密码">
须要输入框有form-control这个类 有对应的name logver 为包含这个input 这个DOM的外层盒子的id值 这个id 保证这个一个页面中相同的name值在不一样的ID盒子里进行验证 自定义的样式能够在验证后审查元素 去定义本身的样式