一个简易的表单校验插件wv.js

很多网站都有登陆和注册功能,只要涉及到登陆和注册的几乎全部都要用到表单,而表单在提交前,需要对输入进行校验,验证输入长度,类型等等是否合法,目前常用的就是jQuery-validate.js这个插件。其实这些插件的实现眼里都是比较简单的,主要用到input标签的focus和blur事件,然后在这个事件触发的时候通过正则表达式对输入的值进行检验,然后返回校验结果。
现在我们就来实现一个简单的表单校验器

/**
 * author:yangyangwang
 * desc:表单验证插件
 */
(function(window,$){
    var wv = function(){

    }
    wv.prototype={
        valid:true,
        version:"1.0.0",
        name:"wv",
        desc:"表单验证插件",
        rules:{
            "noEmpty":{
                rules:function(value,title){
                    if(!value){
                        return title+"不能为空"
                    }
                }
            },
            "Number":{
                rules:function(value,title){
                    if(!value){
                        return title+"不能为空"
                    }else{
                        if(!/^[0-9]*$/.test(value)){
                            return title+"只能是数字"
                        }
                    }
                }
            }
        },
        addRules:function(option){
            //检验option是否合法
            if($.type(option)){

            }else{
                throw new Error("规则不合法!")
                return;
            }
            this.rules=$.extend(this.rules, option);
        },
        init:function(option){
            var defaultOption = {
                color:"red",//提示字体颜色
                border:"0px solid red",
                left:"40%",
                top:"2px"
            };
            var option = $.extend(defaultOption,option);
            var self = this;
            $("input[validate]").on("focus",function(e){
                var ev = e||event;
                var target = ev.target;
                $(target).siblings(".tip").remove();//当输入框激活时移除提示文字
                $(target).css({//当输入框激活时如果之前处于错误提示样式则恢复到激活样式
                    border:'1px solid cornflowerblue',
                    boxShadow:'0px 0px 5px cornflowerblue'
                })
            });
            $("input[validate]").on("blur",function(e){//输入框失去焦点的时候进行输入验证
                var ev = e||event;
                var target = ev.target;
                var ruleStr = $(target).attr("validate");
                var rulesArr = ruleStr.split(" ");
                for(var i = 0;i<rulesArr.length;i++){
                    var msg = self.validMethod(rulesArr[i],target);
                    if(msg){
                        var tip = document.createElement("span");
                             tip.className = "tip";
                             tip.innerText = msg;
                             $(target).after($(tip));
                             $(tip).css({
                                position:"relative",
                                dispaly:"inline-block",
                                minWidth:"80px",
                                padding:"3px",
                                height:"25px",
                                lineHeight:'center',
                                background:'rgba(0,0,0,0)',
                                color:option.color,
                                border:option.border,
                                borderRadius:"3px",
                                fontWeight:"600",
                                fonSize:"13px",
                                left:option.left,
                                top:option.top
                             });
                        target.style.border="1px solid #ed8464";
                        target.style.boxShadow="0px 0px 5px #dc3b33";
                        this.valid = false;
                        break;
                    }
                    else{
                        target.style.border="1px solid #558630";
                        target.style.boxShadow="0px 0px 0px";
                    }   
                }
            })
        },
        validMethod:function(rule,obj){
            var msg = "";
            var title = $(obj).attr("title")||"该输入项";
            var value = $(obj).val();
            if(this.rules[rule]){
                try{
                    msg = this.rules[rule].rules(value,title);
                }catch(e){
                    throw new Error("校验规则不合法")
                }
            }
            return msg;
        }   
    }
    wv.prototype.init.prototype = wv.prototype;//这句的目的是为了让init中的this和mv.prototype中的this是同一个对象。参考jquery中的实现;
    window.wv = wv;
})(window,$)

插件是基于jquery的,所有在用这个插件前要保证jquery已经加载
下面是效果图
noEmpty:
这里写图片描述
Number:
这里写图片描述
Success:
这里写图片描述
这里只内置了noEmpty和Number两种校验,如果需要其他校验可以通过addRules方法添加检验规则

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值