模拟Vue数据双向绑定


     

        //1、根据表单元素内容自动生成obj对象以及对应表单元素属性
        //2、为对象属性赋值后,更新对应表单元素内容;
        //3、更改表单元素内容后,同步更新对象属性值;
        let loginObj=null;
            //初始化创建目标对象
            function initObj(formId){
                //创建目标对象
                let obj={};
                //获取目标表单下所有表单元素
                let inputEles=document.querySelectorAll(`#${formId} input`);
                //遍历input元素
                inputEles.forEach(function(inp){
                    // console.log(inp);
                    //获取表单元素的name属性值(对象的属性名称)
                    let nameVal=inp.name;
                    //获取表单元素的value属性值(对象的属性值)
                    let val=inp.value;
                    // console.log(nameVal,val);
                    Object.defineProperty(obj,nameVal,{
                        set:function(v){
                            //将赋的属性值设置为对应表单值
                            inp.value=v;
                            obj[`_${nameVal}`]=v;
                        },
                        get:function(){
                            return obj[`_${nameVal}`];
                        }
                    });
                    //向目标对象中添加表单对应属性
                    obj[nameVal]=val;
                });
                
                //添加表单元素的change事件(事件委托)
                document.querySelector(`#${formId}`).onchange=function(event){
                    // console.log(event.target);
                    //获取表单元素内容
                    let val=event.target.value;
                    //获取表单元素的name属性值
                    let nameVal=event.target.name;
                    //设置为目标对象属性值
                    obj[nameVal]=val;
                }
                return obj;
            }
            loginObj=initObj('loginForm');

            
          document.querySelector(".dianji").onclick=function(){
              console.log(loginObj);
              console.log( loginObj.email='123456@qq.com');
          }
    <form action="" id="loginForm">
        <input type="text" name="acc" value="admin">
        <input type="password" name="pwd">
        <input type="text" name="tel">
        <input type="text" name="email">
    </form>

    <div class="dianji">
        1
    </div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值