JS原生数据双向绑定实现代码
发布时间 - 2026-01-11 02:46:50 点击率:次代码如下:
<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
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
手机软键盘弹出时影响布局的解决方法
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
Python面向对象测试方法_mock解析【教程】
如何为不同团队 ID 动态生成多个“认领值班”按钮
Python高阶函数应用_函数作为参数说明【指导】
HTML 中动态设置元素 name 属性的正确语法详解
javascript读取文本节点方法小结
Laravel如何实现API资源集合?(Resource Collection教程)
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
Laravel如何升级到最新版本?(升级指南和步骤)
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
高性价比服务器租赁——企业级配置与24小时运维服务
简历在线制作网站免费版,如何创建个人简历?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何用美橙互联一键搭建多站合一网站?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何在自有机房高效搭建专业网站?
Laravel如何使用Eloquent进行子查询
php在windows下怎么调试_phpwindows环境调试操作说明【操作】
Laravel如何发送系统通知?(Notification渠道示例)
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
JavaScript如何实现路由_前端路由原理是什么
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
JavaScript如何操作视频_媒体API怎么控制播放
浅谈redis在项目中的应用
如何在建站主机中优化服务器配置?
晋江文学城电脑版官网 晋江文学城网页版直接进入
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
EditPlus中的正则表达式实战(6)
Python文件操作最佳实践_稳定性说明【指导】
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
如何用腾讯建站主机快速创建免费网站?
JavaScript如何实现继承_有哪些常用方法
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
常州企业网站制作公司,全国继续教育网怎么登录?
MySQL查询结果复制到新表的方法(更新、插入)
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
简单实现Android文件上传
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
大连网站制作公司哪家好一点,大连买房网站哪个好?
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
C++时间戳转换成日期时间的步骤和示例代码
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程

