简化表单验证(面对对象编程)

本文介绍了一种使用面向对象编程方法简化表单验证的方案,通过将输入元素、验证逻辑和反馈信息封装到单一对象中,实现了表单验证的模块化和易于维护。

本篇文章背景是纯html开发,无任何框架,无状态管理。也可迁移到框架开发。

表单操作一直都是前端的一大复杂点,很繁琐。如果用传统的面向过程思维去编写表单验证逻辑,不便于维护,感觉逻辑很散。 做了好几个项目,都需要填写表单并验证,于是我将逻辑抽离,代码如下。
这里是html:

<body>
    <form action="#" method="post">
        <div>
            <label for="phone">手机号:</label>
            <input id="phone" type="text">
            <span id="phoneMsg"></span>
        </div>
        <div>
            <label>验证码:</label>
            <input id="code" type="text">
            <span id="codeMsg"></span>
        </div>
        <div>
            <label>创建密码:</label>
            <input id="pwd" type="password">
            <span id="pwdMsg"></span>
        </div>
        <div>
            <table id="pwdLevel">
                <tr>
                    <td>
                        <div></div><span>弱</span>
                    </td>
                    <td>
                        <div></div><span>中</span>
                    </td>
                    <td>
                        <div></div><span>强</span>
                    </td>
                </tr>
            </table>
        </div>
        <div>
            <label>确认密码:</label>
            <input id="confirmPwd" type="password">
            <span id="confirmPwdMsg"></span>
        </div>
        <div>
            <input type="submit" value="同意并提交">
        </div>
    </form>
</body>
复制代码

下面是js文件:

let inputList = {
    phoneObj: {
        element: document.getElementById("phone"),//input的内容
        elementMsg: document.getElementById("phoneMsg"),//备注信息 
        flag: false,//是否符合格式,是否通过validate验证
        validate: function () {
            return this.element.value && /^1\d{10}$/.test(this.element.value);
        },
    },
    codeObj: {
        element: document.getElementById("code"),
        elementMsg: document.getElementById("codeMsg"),
        flag: false,
        validate: function () {
            return /^\d{6}$/.test(this.element.value);
        },
    },
    pwdObj: {
        element: document.getElementById("pwd"),
        elementMsg: document.getElementById("pwdMsg"),
        flag: false,
        validate: function () {
            return /^.{6,}$/.test(this.element.value);
        }
    },
    confirmObj: {
        element: document.getElementById("confirmPwd"),
        elementMsg: document.getElementById("confirmPwdMsg"),
        flag: false,
        validate: function () {
            return this.element.value && inputList.pwdObj.element.value == this.element.value;
        }
    }
};

let validate = function (obj) {
    obj.element.onblur = function () {
        if (obj.validate()) {
            obj.elementMsg.innerText = "√";
            obj.elementMsg.style.color = "green";
            obj.flag = true;
        } else {
            obj.elementMsg.innerText = "格式错误";
            obj.elementMsg.style.color = "red";
            obj.flag = false;
        }
    }
}
for(let item in inputList){
    validate(inputList[item]);
}
复制代码

差不多就是这样,将同一元素的取值、备注信息、验证函数放在同一对象,由此对象完成一条龙服务,而不是将这一流程分成几部分、零散地去进行,这就是面向对象(此处金光闪闪)。

以面对对象的形式去完成表单验证逻辑,便于工程化增加表单元素,但是不易于个性化验证和样式,有得必有失,还是看需求去选择数据结构和编程模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值