zoukankan      html  css  js  c++  java
  • 用纯js实现双向数据绑定的两种方法

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Object.defineProperty实现双向绑定</title>
    </head>
    <body>
     
        <!-- <input type="text" id="txt1">
        <input type="text" id="txt2"> -->
        <input type="text" id="input">
        <span id="span"></span>
     
    </body>
    <script>



        // 法一:   addEventListener
        //  document.addEventListener('keyup', function (e) {   //keyup,当按钮被松开时触发该事件
        //         var str = e.target.value || "";  //获取当前文本框的值(回车或者点击触发)
        //         //this就是指向当前事件所绑定的元素,而e.target指向事件执行时鼠标所点击区域的那个元素。
        //         // value是JavaScript的属性     val()是jQuery的方法
        //         //每次触发DOM事件时会产生一个事件对象(也称event对象),此处的参数e接收事件对象。而事件对象也有很多属性和方法,其中target属性是获取触发事件对象的目标,也就是绑定事件的元素,e.target表示该DOM元素,然后在获取其相应的属性值。
        //         document.getElementById("txt1").value = str;
        //         document.getElementById("txt2").value = str;
        //     })



        // 法二:   defineProperty
        // Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
        // 备注:应当直接在 Object 构造器对象上调用此方法,而不是在任意一个 Object 类型的实例上调用。 
        // 只要给obj.dataBind赋值,就会触发set方法,只要访问ob.dataBind,就会触发get方法 
        var obj = {};
        Object.defineProperty(obj, 'test', {
            set: function (newVal) {
                document.getElementById('input').value = newVal;
                // document.getElementById('span').innerHTML = newVal;
                document.getElementById('span').innerText = newVal;
            }
        });
        document.addEventListener('keyup', (e) => {
            obj.test = e.target.value;
            /*这步操作是调用obj.test.set(e.target.value)*/
        })




    </script>
    </html>
  • 相关阅读:
    Coursera机器学习week11 单元测试
    关于 TypeReference 的解释
    getModifiers 方法解释。
    instanceof isInstance isAssignableFrom 比较
    elasticsearch 基础 语法总结
    kibana 启动 关闭 和进程查找
    MD5 SHA1 SHA256 SHA512 SHA1WithRSA 的区别
    spring boot 项目 热启动
    java zip 压缩文件
    Packet for query is too large (1660 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
  • 原文地址:https://www.cnblogs.com/mmit/p/14270862.html
Copyright © 2011-2022 走看看