代码如下:
<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小时内与您取得联系。