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 相关文章推荐
seajs1.3.0源码解析之module依赖有序加载
Nov 07 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
Nov 22 Javascript
JavaSript中变量的作用域闭包的深入理解
May 12 Javascript
图文详解JavaScript的原型对象及原型链
Aug 02 Javascript
jquery实现多次上传同一张图片
Jan 09 Javascript
详解angularJs指令的3种绑定策略
Apr 13 Javascript
web.js.字符串与正则表达式操作
May 13 Javascript
利用vscode编写vue的简单配置详解
Jun 17 Javascript
使用ECharts实现状态区间图
Oct 25 Javascript
JointJS流程图的绘制方法
Dec 03 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
Apr 24 Javascript
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 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
ubuntu10.04配置 nginx+php-fpm模式的详解
2013/06/03 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
javaScript面向对象继承方法经典实现
2013/08/20 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
JS如何实现文本框随文本的长度而增长
2015/07/30 Javascript
js+css实现有立体感的按钮式文字竖排菜单效果
2015/09/01 Javascript
自动完成的搜索框javascript实现
2016/02/26 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
有趣的bootstrap走动进度条
2016/12/01 Javascript
详谈JavaScript的闭包及应用
2017/01/17 Javascript
js css自定义分页效果
2017/02/24 Javascript
Vue三层嵌套路由的示例代码
2018/05/05 Javascript
详解vue使用$http服务端收不到参数
2019/04/19 Javascript
简明 Python 基础学习教程
2007/02/08 Python
Python单例模式实例分析
2015/01/14 Python
python实现的简单FTP上传下载文件实例
2015/06/30 Python
使用Python脚本生成随机IP的简单方法
2015/07/30 Python
Python使用Pycrypto库进行RSA加密的方法详解
2016/06/06 Python
发布你的Python模块详解
2016/09/15 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
python计算列表内各元素的个数实例
2018/06/29 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
Numpy 多维数据数组的实现
2020/06/18 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
乌克兰网上服装店:Bolf.ua
2018/10/30 全球购物
Burt’s Bees英国官网:世界领先的天然个人护理品牌
2020/08/17 全球购物
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
2014年除四害工作总结
2014/12/06 职场文书
2015年幼儿园中班开学寄语
2015/05/27 职场文书