全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JS原生数据双向绑定实现代码

代码如下:

<span style="font-family:Times New Roman;font-size:14px;" deep="7"><!DOCTYPE html> 
<html lang="en"> <head> 
  <meta charset="UTF-8"> 
  <title>Demo</title> 
  <script> 
    function DataBinder( object_id ) { 
      // Create a simple PubSub object 
      var pubSub = { 
            callbacks: {}, 
            on: function( msg, callback ) { 
              this.callbacks[ msg ] = this.callbacks[ msg ] || []; 
              this.callbacks[ msg ].push( callback ); 
            }, 
            publish: function( msg ) { 
              this.callbacks[ msg ] = this.callbacks[ msg ] || []; 
              for ( var i = 0, len = this.callbacks[ msg ].length; i < len; i++ ) { 
                this.callbacks[ msg ][ i ].apply( this, arguments ); 
              } 
            } 
          }, 
          data_attr = "bind-" + object_id, 
          message = object_id + ":input", 
          timeIn; 
          changeHandler = function( evt ) { 
            var target = evt.target || evt.srcElement, // IE8 compatibility 
                prop_name = target.getAttribute( data_attr ); 
            if ( prop_name && prop_name !== "" ) { 
              clearTimeout(timeIn); 
              timeIn = setTimeout(function(){ 
                pubSub.publish( message, prop_name, target.value ); 
              },50); 
            } 
          }; 
      // Listen to change events and proxy to PubSub 
      if ( document.addEventListener ) { 
        document.addEventListener( "input", changeHandler, false ); 
      } else { 
        // IE8 uses attachEvent instead of addEventListener 
        document.attachEvent( "oninput", changeHandler ); 
      } 
      // PubSub propagates changes to all bound elements 
      pubSub.on( message, function( evt, prop_name, new_val ) { 
        var elements = document.querySelectorAll("[" + data_attr + "=" + prop_name + "]"), 
            tag_name; 
        for ( var i = 0, len = elements.length; i < len; i++ ) { 
          tag_name = elements[ i ].tagName.toLowerCase(); 
          if ( tag_name === "input" || tag_name === "textarea" || tag_name === "select" ) { 
            elements[ i ].value = new_val; 
          } else { 
            elements[ i ].innerHTML = new_val; 
          } 
        } 
      }); 
      return pubSub; 
    } 
    function DBind( uid ) { 
      var binder = new DataBinder( uid ), 
      user = { 
        // ... 
        attributes: {}, 
        set: function( attr_name, val ) { 
          this.attributes[ attr_name ] = val; 
          // Use the `publish` method 
          binder.publish( uid + ":input", attr_name, val, this ); 
        }, 
        get: function( attr_name ) { 
          return this.attributes[ attr_name ]; 
        }, 
        _binder: binder 
      }; 
      // Subscribe to the PubSub 
      binder.on( uid + ":input", function( evt, attr_name, new_val, initiator ) { 
        if ( initiator !== user ) { 
          user.set( attr_name, new_val ); 
        } 
      }); 
      return user; 
    } 
  </script> 
</head> 
<body> 
<input type="text" bind-1="name" /> 
<span bind-1="name"></span> 
<script> 
  var DBind = new DBind( 1 ); 
  DBind.set( "name", "" ); 
</script> 
</body> 
</html>
</span> 

效果示例:

总结

以上所述是小编给大家介绍的JS原生数据双向绑定实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# js  # 原生数据双向绑定  # js双向绑定  # javascript实现数据双向绑定的三种方式小结  # Vue.js每天必学之数据双向绑定  # 轻松实现javascript数据双向绑定  # 深入学习AngularJS中数据的双向绑定机制  # 浅谈AngularJs 双向绑定原理(数据绑定机制)  # Vue.js第一天学习笔记(数据的双向绑定、常用指令)  # 深入理解Angularjs向指令传递数据双向绑定机制  # AngularJS学习笔记(三)数据双向绑定的简单实例  # 实例剖析AngularJS框架中数据的双向绑定运用  # js实现数据双向绑定(访问器监听)  # 小编  # 在此  # 给大家  # 所述  # 绑定  # 给我留言  # 感谢大家  # 疑问请  # 有任何  # pubSub  # var  # object  # callback  # msg  # callbacks 


相关文章: 自助网站制作软件,个人如何自助建网站?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  制作企业网站建设方案,怎样建设一个公司网站?  创业网站制作流程,创业网站可靠吗?  网站制作话术技巧,网站推广做的好怎么话术?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  如何彻底卸载建站之星软件?  高端网站建设与定制开发一站式解决方案 中企动力  如何通过可视化优化提升建站效果?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  做企业网站制作流程,企业网站制作基本流程有哪些?  如何通过FTP服务器快速搭建网站?  如何在服务器上配置二级域名建站?  威客平台建站流程解析:高效搭建教程与设计优化方案  如何通过虚拟主机快速搭建个人网站?  Python多线程使用规范_线程安全解析【教程】  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  北京制作网站的公司,北京铁路集团官方网站?  如何通过商城自助建站源码实现零基础高效建站?  名字制作网站免费,所有小说网站的名字?  网站制作公司,橙子建站是合法的吗?  定制建站策划方案_专业建站与网站建设方案一站式指南  C++用Dijkstra(迪杰斯特拉)算法求最短路径  如何快速查询网站的真实建站时间?  建站之星微信建站一键生成小程序+多端营销系统  如何快速搭建自助建站会员专属系统?  如何在腾讯云免费申请建站?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  建站VPS推荐:2025年高性能服务器配置指南  魔方云NAT建站如何实现端口转发?  网站制作软件有哪些,制图软件有哪些?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在云主机上快速搭建网站?  安云自助建站系统如何快速提升SEO排名?  建站之家VIP精选网站模板与SEO优化教程整合指南  css网站制作参考文献有哪些,易聊怎么注册?  建站主机是否等同于虚拟主机?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  一键网站制作软件,义乌购一件代发流程?  如何选择高效稳定的ISP建站解决方案?  ,制作一个手机app网站要多少钱?  如何选择高效响应式自助建站源码系统?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  购物网站制作公司有哪些,哪个购物网站比较好?  营销式网站制作方案,销售哪个网站招聘效果最好?  湖南网站制作公司,湖南上善若水科技有限公司做什么的? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。