国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS原生數據雙向綁定實現代碼

2019-11-19 15:48:54
字體:
來源:轉載
供稿:網友

代碼如下:

<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原生數據雙向綁定實現代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玉田县| 平遥县| 苏尼特左旗| 兴仁县| 石屏县| 三台县| 郸城县| 铁岭县| 大足县| 陇川县| 黎平县| 光泽县| 安岳县| 策勒县| 元氏县| 鸡泽县| 定结县| 饶平县| 钦州市| 临高县| 衡东县| 乌兰察布市| 怀柔区| 澎湖县| 米易县| 当雄县| 洛扎县| 马龙县| 华坪县| 合水县| 航空| 科技| 博客| 桂林市| 横山县| 锦州市| 北海市| 蓬安县| 浑源县| 宁远县| 黔南|