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 相关文章推荐
extJs 常用到的增,删,改,查操作代码
Dec 28 Javascript
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
Oct 11 Javascript
jQuery简易图片放大特效示例代码
Jun 09 Javascript
Javascript获取当前时间函数和时间操作小结
Oct 01 Javascript
JavaScript中window.showModalDialog()用法详解
Dec 18 Javascript
jQuery模拟黑客帝国矩阵效果实例
Jun 28 Javascript
javascript cookie的简单应用
Feb 24 Javascript
Javascript删除指定元素节点的方法
Jun 21 Javascript
jquery实现跳到底部,回到顶部效果的简单实例(类似锚)
Jul 10 Javascript
jQuery实现手机上输入后隐藏键盘功能
Jan 04 Javascript
脚手架vue-cli工程webpack的作用和特点
Sep 29 Javascript
vue使用require.context实现动态注册路由
Dec 25 Vue.js
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
一个简洁的多级别论坛
2006/10/09 PHP
PHP 采集获取指定网址的内容
2010/01/05 PHP
php 求质素(素数) 的实现代码
2011/04/12 PHP
php使用ICQ网关发送手机短信
2013/10/30 PHP
windows下apache搭建php开发环境
2015/08/27 PHP
总结PHP中DateTime的常用方法
2016/08/11 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
jQuery 使用手册(七)
2009/09/23 Javascript
node.js从数据库获取数据
2016/05/08 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
全面了解JS中的匿名函数
2016/06/29 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
代码详解javascript模块加载器
2018/03/04 Javascript
Vue实现导航栏菜单
2020/08/19 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
javascript实现简单留言板案例
2021/02/09 Javascript
python模拟登陆Tom邮箱示例分享
2014/01/13 Python
Python实用日期时间处理方法汇总
2015/05/09 Python
pandas.dataframe按行索引表达式选取方法
2018/10/30 Python
详解从Django Rest Framework响应中删除空字段
2019/01/11 Python
python3转换code128条形码的方法
2019/04/17 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
2019/09/10 Python
python中time包实例详解
2021/02/02 Python
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
白酒市场开发计划书
2014/01/09 职场文书
校园奶茶店创业计划书
2014/01/23 职场文书
春节晚会主持词
2014/03/24 职场文书
毕业生自荐信如何写
2014/03/24 职场文书
留学经费担保书
2014/05/12 职场文书
党的群众路线教育实践活动整改落实情况报告
2014/10/28 职场文书
经营场所证明范本
2015/06/19 职场文书
js实现上传图片到服务器
2021/04/11 Javascript
React配置子路由的实现
2021/06/03 Javascript
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers