ES6 proxy 属性实现 表单数据提交之前校验拦截

最近在学习ES6的特性 看到proxy代理 上网查了一下运用场景看到有用proxy 可以进行表单提交数据拦截 所以敲一个demo记录一下

话不多说 贴代码

<!-- html部分 -->
<form action="">
        <div>
            <label for="">姓名</label><input type="text" name="username">
        </div>
        <div>
            <label for="">手机号</label><input type="text" name="phone">
        </div>
        <input type="button" value="提交" onclick="formSub()">
    </form>
<!--js 部分-->
// proxy实际应用场景1:利用proxy拦截判断 form表单提交数据
        var formData={};
        var formHandler={
            get:function(target,propKey){
                // 获取数据拦截
                /* console.log()
                if(propKey=="username"){
                    // 判断用户名是否正确
                    var reg = /^([\u4E00-\u9FA5])*$/;
                    if(!reg.test(target[propKey])){   
                        alert("姓名必须为中文");
                        return ""
                    }
                } */
                //return target[propKey];
                
            },
            set:function(target,propKey,value){
                // 设置数据拦截
                console.log("此时为设置数据");
                if(propKey=="username"){
                    // 判断用户名是否正确
                    let reg = /^([\u4E00-\u9FA5])*$/;
                    if(!reg.test(value)){   
                        alert("姓名必须为中文");
                        return ""
                    }
                }
                if(propKey=="phone"){
                    let reg=/^1[3456789]\d{9}$/;
                    console.log(value);
                    if(!reg.test(Number(value))){
                        alert("手机号有误");
                        return ""
                    }
                }
                // 对于满足条件的数据直接保存
                target[propKey]=value;
            }
        }
        var formproxy=new Proxy(formData,formHandler);
        // 提交表单
        function formSub(){
            console.log("2333");
            //获取表单数据
            
            $("form input[type='text']").each(function(){
                console.log($(this).attr("name"),$(this).val());
                formproxy[$(this).attr("name")]=$(this).val();
            })
            console.log("表单提交数据",formproxy);
            
            console.log(formproxy.username);
        }

当前点击按钮调用了 formSub方法的时候 因为对formproxy对象的值进行了重新设置 所以触发了proxy代理中的set事件 通过在set里设置校验判断 不满足条件的拦截 返回空字符串 满足条件的直接赋值保存从而实现一个简易的 提交数据校验效果。

总结完啦,继续上班码代码了~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值