js事件模型与自定义事件实例解析
发布时间 - 2026-01-10 22:01:59 点击率:次JavaScript 一个最简单的事件模型,需要有事件绑定与触发,还有事件删除。
var eventModel = {
list: {},
bind: function () {
var args = [].slice.call(arguments),
type = args[0],
handlers = args.slice(1);
if (typeof type === 'string' && handlers.length > 0) {
for (var i = 0; i < handlers.length; i++) {
if (typeof handlers[i] === 'function') {
if (!this.list[type]) {
this.list[type] = [];
}
this.list[type].push(handlers[i]);
}
}
}
},
unbind: function () {
var type = arguments[0],
handlers = Array.prototype.slice.call(arguments, 1);
if (typeof type === 'string') {
if (handlers.length === 0) {
this.list[type] = [];
} else {
for (var i = 0; i < handlers.length; i++) {
if (typeof handlers[i] === 'function' && handlers[i] === this.list[type][i]) {
this.list[type].splice(i, 1);
}
}
}
}
},
trigger: function () {
var arguments = [].slice.call(arguments),
type = arguments[0],
args = arguments[1] instanceof Array && !arguments[2] ? arguments[1] : arguments.slice(1),
handlers = this.list[type];
for (var i = 0; i < handlers.length; i++) {
handlers[i].apply(this, args.splice(0, handlers[i].length));
}
}
};
其中主要实现了bind(绑定事件)、unbind(删除事件)与 trigger (触发事件)。对同一事件名称,可以绑定多个事件处理函数;并按照绑定的顺序依次触发。
args.splice(0, handlers[i].length) 触发时的传参
事件绑定与触发:
eventModel.bind('myevent1', function (a) {
console.log(a); // 1
}, function(b) {
console.log(b); // 2
}, function(c, d) {
console.log(c + ' + ' + d); // a + b
});
eventModel.bind('myevent1', function (e) {
console.log(e); // 50
});
eventModel.trigger('myevent1', 1,2,'a','b', 50);
事件删除:
<button id="bind">bind</button> <button id="unbind">unbind</button>
var fnX = function () {
console.log('fnX');
}
var fnY = function () {
console.log('fnY');
}
eventModel.bind('myevent2', fnX, fnY);
document.getElementById('unbind').onclick = function () {
eventModel.unbind('myevent2', fnX); //删除 fnX 后,只剩下 fnY
};
document.getElementById('bind').onclick = function () {
eventModel.trigger('myevent2'); //输出 fnX fnY
//在点击unbind后,只输出 fnY
};
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# js
# 事件模型
# 自定义事件
# 带你快速理解javascript中的事件模型
# javascript事件捕获机制【深入分析IE和DOM中的事件模型】
# javascript事件模型介绍
# javascript事件模型实例分析
# Javascript基础知识(一)核心基础语法与事件模型
# 关于javascript DOM事件模型的两件事
# javascript 传统事件模型构造的事件监听器实现代码
# javascript事件模型代码
# 详解JS浏览器事件模型
# 绑定
# 多个
# 只剩下
# 最简单
# 实现了
# type
# handlers
# call
# arguments
# length
# gt
# lt
# typeof
# string
# amp
# brush
# var
# JavaScript
# pre
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
网站建设整体流程解析,建站其实很容易!
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
如何快速配置高效服务器建站软件?
如何挑选最适合建站的高性能VPS主机?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
香港服务器网站推广:SEO优化与外贸独立站搭建策略
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
韩国服务器如何优化跨境访问实现高效连接?
香港服务器选型指南:免备案配置与高效建站方案解析
如何快速使用云服务器搭建个人网站?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
微信小程序 canvas开发实例及注意事项
个人网站制作流程图片大全,个人网站如何注销?
高端建站如何打造兼具美学与转化的品牌官网?
如何利用DOS批处理实现定时关机操作详解
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
使用spring连接及操作mongodb3.0实例
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
PHP 500报错的快速解决方法
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
佛山网站制作系统,佛山企业变更地址网上办理步骤?
香港服务器租用费用高吗?如何避免常见误区?
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
Python3.6正式版新特性预览
如何快速登录WAP自助建站平台?
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
PHP正则匹配日期和时间(时间戳转换)的实例代码
如何基于云服务器快速搭建网站及云盘系统?
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
如何快速打造个性化非模板自助建站?
如何为不同团队 ID 动态生成多个“认领值班”按钮
Laravel如何处理表单验证?(Requests代码示例)
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
如何在新浪SAE免费搭建个人博客?
如何实现javascript表单验证_正则表达式有哪些实用技巧
Android使用GridView实现日历的简单功能
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
详解Android图表 MPAndroidChart折线图
如何在宝塔面板中修改默认建站目录?
C++用Dijkstra(迪杰斯特拉)算法求最短路径

