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 相关文章推荐
caller和callee的区别介绍及演示结果
Mar 10 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
Nov 23 Javascript
了不起的node.js读书笔记之例程分析
Dec 22 Javascript
fastclick插件导致日期(input[type="date"])控件无法被触发该如何解决
Nov 09 Javascript
JavaScript对象数组排序实例方法浅析
Jun 15 Javascript
Vue.js实现表格动态增加删除的方法(附源码下载)
Jan 20 Javascript
jQuery实现简单的滑动导航代码(移动端)
May 22 jQuery
jQuery实现获取动态添加的标签对象示例
Jun 28 jQuery
微信小程序如何利用getCurrentPages进行页面传值
Jul 01 Javascript
Vue中jsx不完全应用指南小结
Nov 01 Javascript
Angular如何由模板生成DOM树的方法
Dec 23 Javascript
javascript自定义加载loading效果
Sep 15 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
投票管理程序
2006/10/09 PHP
PHP句法规则详解 入门学习
2011/11/09 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
2012/01/03 PHP
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
php使用escapeshellarg时中文被过滤的解决方法
2016/07/10 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
Ext grid 添加右击菜单
2009/11/26 Javascript
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
浅谈js中test()函数在正则中的使用
2016/08/19 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
JS数组扁平化、去重、排序操作实例详解
2020/02/24 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
2020/04/28 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
[59:07]海涛为你详解DOTA2新版本“贤哲秘契”
2014/11/22 DOTA
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
华为2019校招笔试题之处理字符串(python版)
2019/06/25 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
python 实现批量图片识别并翻译
2020/11/02 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
电影小兵张嘎观后感
2015/06/03 职场文书
高中同学会致辞
2015/08/01 职场文书
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis
win sever 2022如何占用操作主机角色
2022/06/25 Servers