JS中自定义事件的使用与触发操作实例分析


Posted in Javascript onNovember 01, 2019

本文实例讲述了JS中自定义事件的使用与触发操作。分享给大家供大家参考,具体如下:

1. 事件的创建

JS中,最简单的创建事件方法,是使用Event构造器:

var myEvent = new Event('event_name');

但是为了能够传递数据,就需要使用 CustomEvent 构造器:

var myEvent = new CustomEvent('event_name', {
 detail:{
  // 将需要传递的数据写在detail中,以便在EventListener中获取
  // 数据将会在event.detail中得到
 },
});

2. 事件的监听

JS的EventListener是根据事件的名称来进行监听的,比如我们在上文中已经创建了一个名称为‘event_name' 的事件,那么当某个元素需要监听它的时候,就需要创建相应的监听器:

//假设listener注册在window对象上
window.addEventListener('event_name', function(event){
 // 如果是CustomEvent,传入的数据在event.detail中
 console.log('得到数据为:', event.detail);

 // ...后续相关操作
});

至此,window对象上就有了对‘event_name' 这个事件的监听器,当window上触发这个事件的时候,相关的callback就会执行。

3. 事件的触发

对于一些内置(built-in)的事件,通常都是有一些操作去做触发,比如鼠标单击对应MouseEvent的click事件,利用鼠标(ctrl+滚轮上下)去放大缩小页面对应WheelEvent的resize事件。
然而,自定义的事件由于不是JS内置的事件,所以我们需要在JS代码中去显式地触发它。方法是使用 dispatchEvent 去触发(IE8低版本兼容,使用fireEvent):

// 首先需要提前定义好事件,并且注册相关的EventListener
var myEvent = new CustomEvent('event_name', { 
 detail: { title: 'This is title!'},
});
window.addEventListener('event_name', function(event){
 console.log('得到标题为:', event.detail.title);
});
// 随后在对应的元素上触发该事件
if(window.dispatchEvent) { 
 window.dispatchEvent(myEvent);
} else {
 window.fireEvent(myEvent);
}
// 根据listener中的callback函数定义,应当会在console中输出 "得到标题为: This is title!"

需要特别注意的是,当一个事件触发的时候,如果相应的element及其上级元素没有对应的EventListener,就不会有任何回调操作。

对于子元素的监听,可以对父元素添加事件托管,让事件在事件冒泡阶段被监听器捕获并执行。这时候,使用event.target就可以获取到具体触发事件的元素。

PS:这里再为大家附上javascript系统自带事件参考表供大家参考查询:

javascript事件与功能说明大全:
http://tools.3water.com/table/javascript_event

更多关于JavaScript相关内容可查看本站专题:《JavaScript事件相关操作与技巧大全》、《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JavaScript 异步调用框架 (Part 5 - 链式实现)
Aug 04 Javascript
javascript 动态生成私有变量访问器
Dec 06 Javascript
JavaScript按值删除数组元素的方法
Apr 24 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
Nov 25 Javascript
简单理解JavaScript中的封装与继承特性
Mar 19 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
Sep 21 Javascript
微信小程序 生命周期详解
Oct 12 Javascript
详解vue中axios的封装
Jul 18 Javascript
详解javascript replace高级用法
Feb 17 Javascript
js实现随机点名程序
Sep 17 Javascript
js prototype深入理解及应用实例分析
Nov 25 Javascript
vue和H5 draggable实现拖拽并替换效果
Jul 29 Javascript
vue设置动态请求地址的例子
Nov 01 #Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
Nov 01 #Javascript
js实现旋转的星空效果
Nov 01 #Javascript
浅谈小程序globalData的那些事儿
Nov 01 #Javascript
小程序怎样让wx.navigateBack更好用的方法实现
Nov 01 #Javascript
vue实现配置全局访问路径头(axios)
Nov 01 #Javascript
vue.js路由mode配置之去掉url上默认的#方法
Nov 01 #Javascript
You might like
编写自己的php扩展函数
2006/10/09 PHP
浅析关于PHP位运算的简单权限设计
2013/06/30 PHP
thinkphp使用phpmailer发送邮件的方法
2014/11/24 PHP
CodeIgniter集成smarty的方法详解
2016/05/26 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
每天一篇javascript学习小结(Boolean对象)
2015/11/12 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
2017/03/02 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
JS实现简单表格排序操作示例
2017/10/07 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
python实现抖音点赞功能
2019/04/07 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
python通过http下载文件的方法详解
2019/07/26 Python
Django之使用内置函数和celery发邮件的方法示例
2019/09/16 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
耐克美国官网:Nike.com
2016/08/01 全球购物
最新大学职业规划书范文
2013/12/30 职场文书
先进党支部事迹材料
2014/01/13 职场文书
总经理助理工作职责
2014/02/06 职场文书
2014年电信员工工作总结
2014/12/19 职场文书
初二学生评语大全
2014/12/26 职场文书
音乐之声观后感
2015/06/04 职场文书
幼儿园国培研修日志
2015/11/13 职场文书