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之appendChild、insertBefore和insertAfter使用说明
Dec 30 Javascript
常用jQuery选择器总结
Jul 11 Javascript
Javascript动态创建div的方法
Feb 09 Javascript
基于JavaScript实现点击页面任何位置返回
Aug 31 Javascript
懒加载实现的分页&&网站footer自适应
Dec 21 Javascript
JavaScript数组复制详解
Feb 02 Javascript
ES6基础之默认参数值
Feb 21 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
Jun 03 Javascript
vue.js实现h5机器人聊天(测试版)
Jul 16 Javascript
前端使用crypto.js进行加密的函数代码
Aug 16 Javascript
element-ui中el-upload多文件一次性上传的实现
Dec 02 Javascript
7个你应该知道的JS原生错误类型
Apr 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
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
如何利用http协议发布博客园博文评论
2015/08/03 PHP
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
php使用curl获取header检测开启GZip压缩的方法
2018/08/15 PHP
fireworks菜单生成器mm_menu.js在 IE 7.0 显示问题的解决方法
2009/10/20 Javascript
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
javaScript实现浮点数转十六进制字符
2013/10/29 Javascript
怎么选择Javascript框架(Javascript Framework)
2013/11/22 Javascript
JS刷新当前页面的几种方法总结
2013/12/24 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
jquery实现ajax加载超时提示的方法
2016/07/23 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
2018/02/06 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
浅谈KOA2 Restful方式路由初探
2019/03/14 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
浏览器JavaScript调试功能无法使用解决方案
2020/09/18 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
Python实现提取文章摘要的方法
2015/04/21 Python
简单谈谈python中的Queue与多进程
2016/08/25 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
2020/03/14 Python
新手学python应该下哪个版本
2020/06/11 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
少先队学雷锋活动月总结
2014/03/09 职场文书
节约用水倡议书
2014/04/16 职场文书
合伙协议书
2014/04/23 职场文书
小学感恩教育活动总结
2014/07/07 职场文书
python区块链实现简版工作量证明
2022/05/25 Python