zoukankan      html  css  js  c++  java
  • 一个自己实现的js表单验证框架。

    经常要做一些表单验证的操作,每次都是用现成的框架,比如jquery,bootstrap等的验证插件,虽然也很强大,也很好用,可就是用起来需要引入许多js库,还有里面功能太多,感觉不太符合自己的需求。最近工作不太忙,便在网上搜了一些资料,也借用了jquery的一些源码,自己做了这个表单验证js。

    一  功能介绍

    1 总结众多验证插件的一些使用经验,我这个js只做验证,不进行表单submit提交,或者ajax提交等额外操作。众多的插件都是和提交功能封装在一起,感觉使用起来似有画蛇添足之嫌。这套js验证后至返回true,false状态,然后调用者可判断状态自己结合本身业务逻辑实现操作,这样用户可控性相对较好。

    2 这个版本只提供名称,邮箱,手机号,身份证验证,如果自己能读懂源码的话,也可以根据实际需要进行扩展。

    3 通过在input标签添加自定义属性来获取验证源数据,自定义属性key值要按源码要求写,保证和源码一一对应,从而能读取到源数据。

    4 验证提示msg可自己在自定义属性的value里面自己定义,注意不要过长,提示弹框用的jquery的tips,目前不能调整宽度,太长会自动换行,影响用户体验。

    5 该js不用引用任何外部js依赖库,引用的jquery代码已经粘贴到js代码内。

    6 只依赖jquery,jquery库还是要引用的。

    二  下面是代码

    /**
    * Author 赵荣磊
    * 版权:赵荣磊 请尊重创作辛苦,引用时不要修改我的名字,本人联系电话13524929813
    *
    * */

    ;(function ($) {
    var cnt = 0;//统计错误次数
    /**
    * jquery全局插件
    */
    $.fn.extend({
    checkValidy: function () {
    // var current = $(this);
    cnt = 0
    $.validate("checkPhone",$.checkPhone);//验证手机
    $.validate("checkName",$.checkName);//验证姓名
    $.validate("checkIdcard",$.checkIdcard);//验证身份证
    $.validate("checkEmail",$.checkEmail);//验证邮箱

    if (cnt > 0) {
    return false;
    }else{
    return true;
    };
    // $(current).submit();
    },
    tips:function(options){
    var defaults = {
    side:1,
    msg:'',
    color:'#FFF',
    bg:'#F00',
    time:2,
    x:0,
    y:0
    }
    var options = $.extend(defaults, options);
    if (!options.msg||isNaN(options.side)) {
    throw new Error('params error');
    }
    if(!$('#jquery_tips_style').length){
    var style='<style id="jquery_tips_style" type="text/css">';
    style+='.jq_tips_box{padding:10px;position:absolute;overflow:hidden;display:inline;display:none;z-index:10176523;}';
    style+='.jq_tips_arrow{display:block;0px;height:0px;position:absolute;}';
    style+='.jq_tips_top{border-left:10px solid transparent;left:20px;bottom:0px;}';
    style+='.jq_tips_left{border-top:10px solid transparent;right:0px;top:18px;}';
    style+='.jq_tips_bottom{border-left:10px solid transparent;left:20px;top:0px;}';
    style+='.jq_tips_right{border-top:10px solid transparent;left:0px;top:18px;}';
    style+='.jq_tips_info{word-wrap: break-word;word-break:normal;border-radius:4px;padding:5px 8px;max-130px;overflow:hidden;box-shadow:1px 1px 1px #999;font-size:12px;cursor:pointer;}';
    style+='</style>';
    $(document.body).append(style);
    }
    this.each(function(){
    var element=$(this);
    var element_top=element.offset().top,element_left=element.offset().left,element_height=element.outerHeight(),element_width=element.outerWidth();
    options.side=options.side<1?1:options.side>4?4:Math.round(options.side);
    var sideName=options.side==1?'top':options.side==2?'right':options.side==3?'bottom':options.side==4?'left':'top';
    var tips=$('<div class="jq_tips_box" style="150px;"><i class="jq_tips_arrow jq_tips_'+sideName+'"></i><div class="jq_tips_info">'+options.msg+'</div></div>').appendTo(document.body);
    tips.find('.jq_tips_arrow').css('border-'+sideName,'10px solid '+options.bg);
    tips.find('.jq_tips_info').css({
    color:options.color,
    backgroundColor:options.bg
    });
    switch(options.side){
    case 1:
    tips.css({
    top:element_top-tips.outerHeight()+options.x,
    left:element_left-10+options.y
    });
    break;
    case 2:
    tips.css({
    top:element_top-20+options.x,
    left:element_left+element_width+options.y
    });
    break;
    case 3:
    tips.css({
    top:element_top+element_height+options.x,
    left:element_left-10+options.y
    });
    break;
    case 4:
    tips.css({
    top:element_top-20+options.x,
    left:element_left-tips.outerWidth()+options.y
    });
    break;
    default:
    }
    var closeTime;
    tips.fadeIn('fast').click(function(){
    clearTimeout(closeTime);
    tips.fadeOut('fast',function(){
    tips.remove();
    })
    })
    if(options.time){
    closeTime=setTimeout(function(){
    tips.click();
    },options.time*1000);
    tips.hover(function(){
    clearTimeout(closeTime);
    },function(){
    closeTime=setTimeout(function(){
    tips.click();
    },options.time*1000);
    })
    }
    });
    return this;
    }
    });

    /**
    * jquery的全局方法
    */
    $.extend({
    validate:function(attrName,checkFun){
    var o = $("["+attrName+"]");
    var validator = $.makeArray(o);
    var msg = o.attr(attrName);
    $.each(validator, function (i) {
    var obj = $(validator[i]);
    console.log(obj);
    if (!checkFun.call(this,obj.val())) {
    cnt++;
    obj.tips({
    side: 3,
    msg: msg,
    bg: '#AE81FF',
    time: 5
    });
    }
    });
    },
    checkNumber: function (val){
    var reg = /^[0-9]*[0-9][0-9]*$/;
    if (val.trim() != ""&& reg.test(val)){
    return true;
    } else {
    return false;
    }
    },
    checkPhone: function (val){
    var reg = /^1[3|4|5|7|8][0-9]d{8}$/;
    if (val.trim() != ""&& reg.test(val)){
    return true;
    } else {
    return false;
    }
    },
    checkName:function(val){
    var reg = new RegExp("^[a-zA-Z0-9_.u4e00-u9fa5s]*$");
    if(val.trim() != ""&&reg.test(val)){
    return true;
    //alert('只能输入中文字母数字下划线点');
    }else{
    return false;
    }
    },
    checkIdcard:function(val){
    var reg = /(^d{15}$)|(^d{18}$)|(^d{17}(d|X|x)$)/;
    if(val.trim() != ""&&reg.test(val)){
    return true;
    }else{
    return false;
    }
    },
    checkEmail:function(val){
    var reg = /^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$/;
    if(val.trim() != ""&&reg.test(val)){
    return true;
    }else{
    return false;
    }
    }
    });
    })(jQuery);

    三 使用示例

     <form name="signUpForm" class="form-horizontal m-t" id="commentForm">

     <input id="linkmanname" type="text" class="form-control" name="linkmanname" checkName="姓名要合规">

    <input id="phone" type="text" class="form-control" name="phone" checkPhone="请输入正确手机号">

    <input id="idcard" type="text" class="form-control" name="idcard" checkIdcard="请输入合法身份证号(15或18位)">

    <input id="email" type="text" class="form-control" name="email" checkEmail="请输入合法邮箱">

    <input type="button" id="first" class="btn btn-primary" onclick="tijiao1()">确认添加1</input>

    </form>

    function tijiao1(){
    var issubmit = $("#commentForm").checkValidy();
    console.log("issubmit:"+issubmit)
    if(issubmit){
    $("#commentForm").submit()
    }
    }

    四 如果使用中遇到问题可以联系我!

  • 相关阅读:
    类型约束的本质:泛型是不完备类型,只有合乎要求的构造才能正确使用和访问。
    函数的泛型约束是函数签名的一部分,不符合约束的初始调用将不能查找到函数(报错)
    泛型约束-swift
    swift语言的特点(相对于oc)
    extension Kingfisher where Base: Image:泛型类型的具体化与实例化
    “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法
    int 和bigint差别有多大?
    MySql5.7 配置文件 my.cnf 设置
    关于mysql 出现 1264 Out of range value for column 错误的解决办法
    git中Please enter a commit message to explain why this merge is necessary.
  • 原文地址:https://www.cnblogs.com/zhaoblog/p/7649551.html
Copyright © 2011-2022 走看看