多表单验证插件api(测试版)

此插件开发的需求来源于公司项目,由于公司经常有很多循环出来的数组,然后用mvvm框架渲染出来,类似这样的东西



其中时间框得验证时间格式,后面紧接着要验证数字格式,验证通过后才可以点击保存执行下面的逻辑,通常的做法呢```我不想说通常的做法好吗``太恶心了

很多朋友说 有一些表单验证插件啊,我想说的是 那是单例表单验证插件,那么根据这种变态的需求,多表单验证插件就诞生了!

一个简单的demo来说明

先来个单例的

<input type="text" class="lxm-number-99-1 aaa bbb" lxm-lable="只能为数字!" >
<input type="text" class="lxm-notNull-99-1 aaa bbb" lxm-lable="不能为空!" >

<a href="javascript:;" class="btn red-btn" ms-click="submitAuditOrder" title="lxm-submit-99-1">搜索</a>


 

大家看到了 以lxm 开头的都是插件专属标签class,用法是:

1、首先要在class里面加上 lxm-number-99-1 其中数字为2位或者一位数字  类似这样都可以 lxm-number-10-11 lxm-number-21-3

2、在input 加上lxm-lable 聪明的你一定猜出来这是干什么用的了,没错就是验证不通过弹出的提示信息

3、在网页的任意地方加上按钮<A> 绑定title 等于 lxm-submit-99-1 同样 数字可以是任意2位组合,不过一定要和你要验证的input添加的class数字一致,插件就是根据末尾2个数字来判断的
好了 大家可以看到我给出的例子里面 有ms-click这个标签,对,就是avalon的click方法,当然你也可以在anglar用此插件,他可以拦截一切点击方法,直到你验证都通过~~这是传统表单验证所不具有的吧``是不是很淫荡
因为是通过类似 添加这样的class : lxm-number-99-10,来与要点击验证的按钮来对应,那么一个页面我算算最多能绑定多少组这样的验证 呢?
应该是 99*99组``应该够了吧,不够你自己去想办法吧
在实际应用过程中,很多mvvm的框架在渲染界面都提供 $index 变量,即获取当前数据在数组中的下标,这样你就可以绑定到class上动态生成了举例(avalon的例子):
<div ms-repeat="arry1">
<div ms-repeat-al="el.arry2">
<input type="text" ms-duplex="al.guestName"  ms-class="lxm-notNull-{{$outer.$index}}-{{$index}}:al.auditStatus==1">
<a class="btn red-btn mb10"   ms-attr-title="lxm-submit-{{$outer.$index}}-{{$index}}" ms-click="saveThis">保存</a>
</div>
</div>


 
 
这里有一个问题,就是可能arry1的数据是某个事件之后获取到的,也就是在首次访问也门dom加载完毕并没有生成,那么就需要在相应的事件之后加上本插件的方法
lxmValidata();重新获取一下页面上的dom结构,这一条很重要,别到时候不管用来骂我;需要jquery支持
下面贴上源码:100行左右
<div><pre name="code" class="html"> var lxmValidata=function(){
        var number = new RegExp("^[0-9]*$");//匹配数字
        var thisBtn=$("a[title*='lxm-submit']");
        var thisNewBtn;
        var thisInput=$("input[class*='lxm-']");
        var access;
        var thisBtnI;
        //------拓展验证变量定义开始,需要定义自己的验证就按照目前的格式来 lxm-abcd 主要lxm- 后面必须接全部英文字母不能有数字-----------
        var inputNotNull="lxm-notNull";
        var inputNumber="lxm-number";
        var inputDate="lxm-date";

        window[inputNotNull]= /\S/;//验证不能为空
        window[inputNumber]= new RegExp("^[0-9]*$");//验证数字
        window[inputDate]=/^(\d{4})-(\d{2})-(\d{2})$/;//时间格式验证 2015-11-02
        //------拓展验证变量定义结束-----------
        var validataArry=[]
        for(var i=0;i<thisBtn.length;i++){
            var arry=[];
            validataArry.push(arry);
        }
        var validateInput=function(a,b,t){
            var reg=new RegExp(a+"-[0-9]+-[0-9]+")
            var aa=t.attr("class").match(reg)
            aa= aa[0].replace(a,"")
            //console.log(aa)
            for(var i=0;i<thisBtn.length;i++){
                if($(thisBtn[i]).attr("title")=="lxm-submit"+aa){
                    thisBtnI=i;
                }
            }
            if(!b.test(t.val())){
                access=true;
            }else{
                access=false;
            }
        }
        thisInput.each(function(){
            var reg=/lxm-[\w\W]+?(-\d{1,2}){2}/;
            var aa=$(this).attr("class").match(reg)
            aa=aa[0].split("-");
            var bb=aa[0]+"-"+aa[1];
            validateInput(bb,window[bb],$(this));
            if(access){
                validataArry[thisBtnI].push($(this))
            }
        })
        thisInput.each(function(){
            $(this).on("input propertychange focus",function(e){
                var reg=/lxm-[\w\W]+?(-\d{1,2}){2}/;
                var aa=$(this).attr("class").match(reg)
                aa=aa[0].split("-");
                var bb=aa[0]+"-"+aa[1];
                validateInput(bb,window[bb],$(this));
                if(!access){
                    $("#lxm-alert"+thisBtnI).remove()
                    if(validataArry[thisBtnI].length>0){
                        for(var i=0;i<validataArry[thisBtnI].length;i++){
                            if(validataArry[thisBtnI][i].offset().left==$(this).offset().left&&validataArry[thisBtnI][i].offset().top==$(this).offset().top){
                                validataArry[thisBtnI].splice(i,1)
                            }
                        }
                    }

                }else{
                    if(validataArry[thisBtnI].length>0){
                        for(var i=0;i<validataArry[thisBtnI].length;i++){
                            if(validataArry[thisBtnI][i].offset().left!=$(this).offset().left||validataArry[thisBtnI][i].offset().top!=$(this).offset().top){
                                validataArry[thisBtnI].push($(this))
                            }
                        }
                    }else{
                        validataArry[thisBtnI].push($(this))
                    }

                }
                if(validataArry[thisBtnI].length==0){
                     $(thisNewBtn[thisBtnI]).hide();
                }else{
                     $(thisNewBtn[thisBtnI]).show();
                }
           })
        })
        //console.log(validataArry);
        for(var i=0;i<thisBtn.length;i++){
            if($("a[id=lxm-newSubmit-"+i+"]").length==0){
                $(thisBtn[i]).after("<a lxm-title='"+$(thisBtn[i]).attr("title")+"' id='lxm-newSubmit-"+i+"' style='position:absolute;z-index:999;left:"+$(thisBtn[i]).position().left+"px;top:"+$(thisBtn[i]).position().top+"px' href='javascript:;' "+" class='"+$(thisBtn[i]).attr("class")+" '>"+$(thisBtn[i]).html()+"</a>")

            }
            thisNewBtn=$("a[id*=lxm-newSubmit]");
            if( validataArry[i].length==0){
              // $("#lxm-newSubmit-"+i).hide();
                $(thisNewBtn[i]).hide();
            }
        }

        thisNewBtn.click(function(){
                var reg=new RegExp("lxm-newSubmit-[0-9]+")
                var aa=$(this).attr("id").match(reg)
                aa= aa[0].replace("lxm-newSubmit-","")
                if(validataArry[aa].length>0){
                    $(validataArry[aa][0]).focus();
                    if($("#lxm-alert"+aa).length==0){
                        var l=0;
                        if($(validataArry[aa][0]).width()<=50){
                            l=$(validataArry[aa][0]).width()/2+20;
                        }
                        $(validataArry[aa][0]).after("<div class='lxm-alert' id='lxm-alert"+aa+"' style='position: absolute;left: "+ ($(validataArry[aa][0]).position().left-l)+"px;top:"+ ($(validataArry[aa][0]).position().top+35)+"px'><div style='width: 12px; left: 50%; margin-left: -6px; height: 6px; text-indent: 0px; overflow: hidden; position: absolute; top: -6px;'><before style='border-color: transparent transparent rgb(247, 206, 57); border-style: dashed dashed solid; bottom: 0px; width: 0px; height: 0px; overflow: hidden; border-width: 6px; position: absolute;'></before><after style='border-color: transparent transparent rgb(255, 255, 224); border-style: dashed dashed solid; bottom: -1px; width: 0px; height: 0px; overflow: hidden; border-width: 6px; position: absolute;'></after></div>"+ $(validataArry[aa][0]).attr("lxm-lable")+"</div>")
                    }
                }else{
                    $("#lxm-alert"+aa).remove()
                }
            })
    }

$(function(){
    lxmValidata();
})



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jQuery是一个非常流行的JavaScript库,它提供了许多有用的函数和方法,可以方便地操作HTML文档中的元素和事件。在此基础上,开发者可以使用jQuery编写验证件。 以下是一个基于jQuery的验证件示例: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>验证件示例</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script> $(document).ready(function() { $('#myForm').submit(function() { var name = $('#name').val(); var email = $('#email').val(); var password = $('#password').val(); if (name === '') { alert('请输入姓名!'); return false; } if (email === '') { alert('请输入电子邮件地址!'); return false; } if (!isValidEmail(email)) { alert('请输入有效的电子邮件地址!'); return false; } if (password === '') { alert('请输入密码!'); return false; } return true; }); function isValidEmail(email) { var emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; return emailRegex.test(email); } }); </script> </head> <body> <form id="myForm"> <label for="name">姓名:</label> <input type="text" id="name" name="name" /><br /> <label for="email">电子邮件地址:</label> <input type="text" id="email" name="email" /><br /> <label for="password">密码:</label> <input type="password" id="password" name="password" /><br /> <input type="submit" value="提交" /> </form> </body> </html> ``` 在上面的示例中,我们使用了jQuery的`submit()`方法来监听提交事件。在提交之前,我们检查了每个字段是否有值,并且验证了电子邮件地址的格式。如果有任何一个字段的值不合法,我们就弹出一个警告框,并且返回`false`,阻止提交。否则,我们返回`true`,允许提交。 当然,这只是一个简的示例,实际的验证件可能会更加复杂和灵活。但是,这个示例可以帮助你了解如何使用jQuery来编写验证件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值