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 相关文章推荐
如何在Web页面上直接打开、编辑、创建Office文档
Mar 12 Javascript
JavaScript DOM 添加事件
Feb 14 Javascript
javascript中创建对象的三种常用方法
Dec 30 Javascript
JavaScript基本编码模式小结
May 23 Javascript
JavaScript数值数组排序示例分享
May 27 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
Jun 08 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
May 16 Javascript
vue+axios+promise实际开发用法详解
Oct 15 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
May 31 jQuery
如何在微信小程序中实现Mixins方案
Jun 20 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
Sep 26 Javascript
ant design vue导航菜单与路由配置操作
Oct 28 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
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
JS 动态加载脚本的4种方法
2009/05/05 Javascript
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
JQuery+JS实现仿百度搜索结果中关键字变色效果
2011/08/02 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
jQuery mobile 移动web(4)
2015/12/20 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
2016/01/05 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
浅谈js中用$(#ID)来作为选择器的问题(id重复的时候)
2017/02/14 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
2018/11/15 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
2019/09/25 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
原生JS实现音乐播放器
2021/01/26 Javascript
python xpath获取页面注释的方法
2019/01/14 Python
解决pycharm工程启动卡住没反应的问题
2019/01/19 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
美国批发零售网站:GearXS
2016/07/26 全球购物
Vans英国官方网站:美国南加州的原创极限运动潮牌
2017/01/20 全球购物
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
"引用"与指针的区别是什么
2016/09/07 面试题
方正Java笔试题
2014/07/03 面试题
档案接收函
2014/01/13 职场文书
运动会通讯稿300字
2014/02/02 职场文书
军训考核自我鉴定
2014/02/13 职场文书
2015年青年志愿者工作总结
2015/05/20 职场文书
收入证明申请书
2015/06/12 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS