背景
思路
代码
- 我写的这个验证上基本没啥bug了,包括了表单提交和验证后表单按钮的disabled。
- 我这个各个功能逻辑写的比较分开,如果以后用到有啥问题也方便修改。
- 就是没写css,css靠个人。
- 验证写了邮箱,手机号,最大值,最小值,身份证号都是Input标签。
- 如果需要绑提交按钮的,就传回调函数名字,从window上拿。提交发送请求就自己发挥。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<script src="jquery-2.0.3.js"></script>
<body>
<body>
<form method="post" action="/22" id="form">
<div>
<label for="email">邮箱:</label>
<input type="text" name="email" id="email" />
</div>
<div>
<label for="idnumber">身份证号码</label>
<input type="text" name="idnumber" id="idnumber" />
</div>
<div>
<label for="phonenumber">手机号</label>
<input type="text" name="phonenumber" id=phonenumber />
</div>
<div>
<label for="maxnumber">最大值</label>
<input type="text" name="maxnumber" id="maxnumber" />
</div>
<div>
<label for="minnumber">最小值</label>
<input type="text" name="minnumber" id="minnumber" />
</div>
<div>
<input type="submit" value="提交" id="send" />
</div>
</form>
</body>
<script>
jQuery.fn.extend({
validate: function (option) {
let that = this
let rqlist = []
let subm =false
let self = {
required: function (context, name,rqlist,subm) {
let target = context.find(`input[name=${name}]`)[0]
let that = this
if (target) {
$(target).on("blur keyup", function () {
let val = $.trim(target.value)
let res = val === '' ? true : false
let parent = $(target).parent()
parent.find(".reqmsg").remove()
if (res) {
parent.append(
'<span style="color:red" class="reqmsg">不能为空! </span>'
)
if(subm){
let sb=context.find(`[type=submit]`)[0]
$(sb).prop('disabled',true)
}
}else{
setTimeout(() => {
that._valid(context,rqlist)
});
}
})
}
},
email: function (context, name,rqlist,subm) {
let target = context.find(`input[name=${name}]`)[0]
let that = this
if (target) {
$(target).on("blur keyup", function () {
let reg = /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/
let val = target.value
let parent = $(target).parent()
parent.find('.error').remove()
if (!reg.test(val)&&val!=='') {
parent.append(
'<span style="color:red" class="error">邮箱有误! </span>'
)
if(subm){
let sb=context.find(`[type=submit]`)[0]
$(sb).prop('disabled',true)
}
} else{
setTimeout(() => {
that._valid(context,rqlist)
});
}
})
}
},
idNumber:function (context, name,rqlist,subm) {
let target = context.find(`input[name=${name}]`)[0]
let that = this
if (target) {
$(target).on("blur keyup", function () {
let reg = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
let val = target.value
let parent = $(target).parent()
parent.find('.error').remove()
if (!reg.test(val)&&val!=='') {
parent.append(
'<span style="color:red" class="error">身份证号有误! </span>'
)
if(subm){
let sb=context.find(`[type=submit]`)[0]
$(sb).prop('disabled',true)
}
}else{
setTimeout(() => {
that._valid(context,rqlist)
});
}
})
}
},
phoneNumber: function (context, name,rqlist,subm) {
let target = context.find(`input[name=${name}]`)[0]
let that = this
if (target) {
$(target).on("blur keyup", function () {
let reg =/^1(3|4|5|7|8)\d{9}$/
let val = target.value
let parent = $(target).parent()
parent.find('.error').remove()
if (!reg.test(val)&&val!=='') {
parent.append(
'<span style="color:red" class="error">手机号有误! </span>'
)
if(subm){
let sb=context.find(`[type=submit]`)[0]
$(sb).prop('disabled',true)
}
}else{
setTimeout(() => {
that._valid(context,rqlist)
});
}
})
}
},
maxNumber: function (context,name,max,rqlist,subm) {
let target = context.find(`input[name=${name}]`)[0]
let that = this
if (target) {
$(target).on("blur keyup", function () {
let val = target.value
let reg = /^(\-|\+){0,1}?\d+$/
let parent = $(target).parent()
parent.find('.error').remove()
if (!reg.test(val)&&val!=='') {
parent.append(
`<span style="color:red" class="error">必须是数字! </span>`
)
if(subm){
let sb=context.find(`[type=submit]`)[0]
$(sb).prop('disabled',true)
}
}else if(val>max){
parent.append(
`<span style="color:red" class="error">不能超过${max}! </span>`
)
if(subm){
let sb=context.find(`[type=submit]`)[0]
$(sb).prop('disabled',true)
}
}else{
setTimeout(() => {
that._valid(context,rqlist)
});
}
})
}
},
minNumber: function (context,name,min,rqlist,subm) {
let that = this
let target = context.find(`input[name=${name}]`)[0]
if (target) {
$(target).on("blur keyup", function () {
let val = target.value
let reg = /^(\-|\+){0,1}?\d+$/
let parent = $(target).parent()
parent.find('.error').remove()
if (!reg.test(val)&&val!=='') {
parent.append(
`<span style="color:red" class="error">必须是数字! </span>`
)
if(subm){
let sb=context.find(`[type=submit]`)[0]
$(sb).prop('disabled',true)
}
}else if(val<min){
parent.append(
`<span style="color:red" class="error">不能小于${min}! </span>`
)
if(subm){
let sb=context.find(`[type=submit]`)[0]
$(sb).prop('disabled',true)
}
}else{
setTimeout(() => {
that._valid(context,rqlist)
});
}
})
}
},
submit:function(context,name,rqlist){
let target=context.find(`[type=submit]`)[0]
if(rqlist){
$(target).prop('disabled',true)
}
this._submit(context,name)
},
_valid:function(context,rqlist){
let err = context.find('.error')
let req = context.find('.reqmsg')
let data = {}
let sign = false
let tmp = context.find('input')
tmp.each((index)=>{
if($(tmp[index]).attr("type")!=='submit'){
data[tmp[index].name]=tmp[index].value
}
})
let num=0
for(let key in data){
if(data[key]===''){
num++
}
}
if(Object.keys(data).length===num){
sign=true
}
let sign2=false
rqlist.forEach((key)=>{
if(data[key]===''){
sign2=true
}
})
let target=context.find(`[type=submit]`)[0]
if(err.length||req.length||sign||sign2){
$(target).prop('disabled',true)
}else{
$(target).prop('disabled',false)
}
},
_submit:function(context,name){
let target=context.find(`[type=submit]`)[0]
if(target){
target.addEventListener('click',function(e){
e.preventDefault()
window[name]()
})
}
}
}
Object.keys(option).forEach((name) => {
option[name].forEach((key) => {
if(key==='required')rqlist.push(name)
if(key==='submit')subm=true
})
})
Object.keys(option).forEach((name)=>{
option[name].forEach((key)=>{
if(typeof key ==='object'){
if(key['maxNumber']){
self['maxNumber'](that,name,key['maxNumber'],rqlist,subm)
}
if(key['minNumber']){
self['minNumber'](that,name,key['minNumber'],rqlist,subm)
}
}else{
self[key](that, name,rqlist,subm)
}
})
})
}
})
function xxx(){
console.log('xxxx');
}
$("#form").validate({
email: ["required", "email"],
idnumber: ["idNumber","required"],
phonenumber:["phoneNumber"],
maxnumber:[{"maxNumber":20}],
minnumber:[{"minNumber":-10}],
xxx:["submit"]
})
</script>
</body>
</html>