用纯js实现双向数据绑定的两种方法

摘要:
----˃//方法1:addEventListener/document。addEventListener('keyup',function(e){//keyup,在释放按钮时触发事件//varstr=e.target.value||“;//获取当前文本框的值(输入或单击触发器)////这是指绑定到当前事件的元素,而e.target是指在执行事件时鼠标单击的区域中的元素////value是JavaScript val()的属性是jQuery的方法///每次触发DOM事件时,都会生成一个事件对象,此处的参数e接收事件对象//document.getElementById.value=str;//document.getElementById.value=str;//})//方法2:定义属性//对象。defineProperty()方法将直接定义对象的新属性,或修改对象的现有属性,并返回该对象。
<!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>

免责声明:文章转载自《用纯js实现双向数据绑定的两种方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇git 同步 本地文件[转]NSString/NSMutableString字符串处理和常用代码 (实例)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

angularjs 路由 异步加载js

angularjs 异步加载js 有两种方法 第一种 使用$q 和 requireJS 加载 这个问题 首要出现 在 当我 把require 引入 项目中是,希望做到 点击路由时加载相应的页面html和 js. 起初我是将 route 的 controller 设置为 require(‘controller.js’) 来 异步加载, 当然,问题是不可能这么...

JS三元表达式

JavaScript三元运算符的多种使用技巧  因为在对学习Vue.js中遇到三元运算符,作为一个新入门前端的小白,对js不是特别了解,所以只能进行知识点的捡要累积,下面对我学习到的  三元运算 来进行一下总结。   在之前我们会经常用到  if(){}else{} 的判断,在了解三元以后,感觉这是比  if else  简单很多的方法。     三元运...

VUE JS 闹钟函数

心跳函数:秒表 setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。 setInterval() 方法会不停地调用函数,直到clearInterval()被调用或窗口被关闭。 由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。 clearInterval() 方法可取消由 s...

5+ App开发入门指南

HTML5 Plus应用概述 HTML5 Plus移动App,简称5+App,是一种基于HTML、JS、CSS编写的运行于手机端的App,这种App可以通过扩展的JS API任意调用手机的原生能力,实现与原生App同样强大的功能和性能。 HTML5 Plus规范 通过HTML5开发移动App时,会发现HTML5很多能力不具备。为弥补HTML5能力的不足,在...

ES6新特性:使用export和import实现模块化

  在ES6前, 前端就使用RequireJS或者seaJS实现模块化, requireJS是基于AMD规范的模块化库,  而像seaJS是基于CMD规范的模块化库,  两者都是为了为了推广前端模块化的工具, 更多有关AMD和CMD的区别, 后面参考给了几个链接;    现在ES6自带了模块化, 也是JS第一次支持module, 在很久以后 ,我们可以直接...

JS实现div的抖动:缓动式抖动

代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Title</title> <style> #di...