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 相关文章推荐
使用原生JS实现弹出层特效
Dec 22 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
Aug 27 Javascript
javascript电商网站抢购倒计时效果实现
Nov 19 Javascript
基于javascript制作微信聊天面板
Aug 09 Javascript
Jquery ajax请求导出Excel表格的实现代码
Jun 08 Javascript
原生JS取代一些JQuery方法的简单实现
Sep 20 Javascript
jQuery实现用户信息表格的添加和删除功能
Sep 12 jQuery
Angularjs过滤器实现动态搜索与排序功能示例
Dec 13 Javascript
Vue弹出菜单功能的实现代码
Sep 12 Javascript
vue element 中的table动态渲染实现(动态表头)
Nov 21 Javascript
浅谈vue权限管理实现及流程
Apr 23 Javascript
jQuery插件实现图片轮播效果
Oct 19 jQuery
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输出当前进程所有变量/常量/模块/函数/类的示例
2013/11/07 PHP
PHP使用in_array函数检查数组中是否存在某个值
2015/03/25 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
yii2分页之实现跳转到具体某页的实例代码
2016/06/02 PHP
php操作access数据库的方法详解
2017/02/22 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
innerHTML 和 getElementsByName 在IE下面的bug 的解决
2010/04/09 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
Javascript实现鼠标右键特色菜单
2015/08/04 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
JS switch判断 三目运算 while 及 属性操作代码
2017/09/03 Javascript
详解js跨域请求的两种方式,支持post请求
2018/05/05 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
通过JS深度判断两个对象字段相同
2019/06/14 Javascript
微信小程序实现左滑动删除效果
2020/03/30 Javascript
Vue项目实现换肤功能的一种方案分析
2019/08/28 Javascript
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
Python中实现结构相似的函数调用方法
2015/03/10 Python
Python双向循环链表实现方法分析
2018/07/30 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
使用CSS3实现字体颜色渐变的实现
2020/08/10 HTML / CSS
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
欧克利英国官网:Oakley英国
2019/08/24 全球购物
《猫》教学反思
2014/02/26 职场文书
经济类毕业生求职信
2014/06/26 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
2014年销售经理工作总结
2014/12/01 职场文书
招商银行收入证明
2015/06/17 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python