JS 的事件基础、事件侦听与抛发、
前言
JavaScript是一种事件驱动型语言。事件驱动是指JavaScript引擎并不是在看到代码之后就会立即执行,而是会在合适的时间才去执行。这个合适的时间是指当某个事件发生之后(例如一个输入框的内容发生了变化,这就是一个事件)。只有当相应的事件发生了之后,相应的操作才会执行,这就是事件驱动。
事件驱动包含三个关键内容:事件、事主和处理方法。
理解了事件模型,我们就能明白JavaScript中的代码虽然是用于描述怎么操作对象的,但是并不一定要立即操作对象。
事件基础、事件侦听与抛发
js事件分为系统事件和自定义派发事件。
IE8以上支持
DOM.addEventListener(事件类型,事件回调函数);
事件侦听方法,仅用于仅用于EventTarget对象,给DOM元素添加一个事件侦听(监听),只能收到对应事件类型的消息,当收到这个消息。就执行事件回调函数。
//这里click这个消息就是系统消息,clickHandler,就是这个系统消息收到后,执行的事件回调函数。
document.addEventListener("cilck",clickHandler);
/**
事件回调函数
e 有且仅有一个参数e
e 是一个事件对象,侦听事件收到的消息时获得的事件对象
*/
function clickHandler(e){
console.log(e);
}
EventTarget.dispatchEvent(事件对象);
抛发事件方法,派发事件,仅用于EventTarget对象
//这里的“myClick”,就是自定义事件类型,是事件传输的“暗号”。
document.addEventListener("myClick",myClickHandler);
var evt = new Event("myClick");//创建一个事件对象
evt.a=10;
document.dispatchEvent(evt);//向document抛发新建的event事件,抛发事件关键是将新建事件的参数传输出来
function myClickHandler(e){
console.log(e===evt);//true
console.log(e.a);//10,接收到了派发事件对象的参数
}
总结
- 事件必须先侦听后抛发。
- 侦听和派发的对象是同一个。
- 侦听和派发的事件类型完全相同。其实事件类型就是一个任意字符串
- 系统派发的事件字符串是固定的,自定义派发的事件,字符串可以任意
- 事件侦听回调函数,不能传参,因此事件回调函数中有且仅有一个参数,这个参数即为事件对象
- 事件都可以手动派发,手动派发的话,页面加载完后就会执行
案例
对象间数据传递, 打算执行obj2.c 将局部变量5传递给obj1的方法b中
要求:使程序模块的可重用性、移植性大大增强。一个好的内聚模块应当恰好做一件事。
obj1 和 obj2 互相调用,但是不相互影响,删除任意一个函数后,也不会报错。
// 高内聚低耦合
var obj1={
a:function(){
// this 对象的方法中this就是该对象自身,这里this就是obj1
document.addEventListener("aaa",this.b);
},
b:function(e){
// 传到这里
console.log(e.s);//5
}
}
var obj2={
v:10,
c:function(){
var s=5;
var evt=new Event("aaa");
evt.s=s;
document.dispatchEvent(evt);
},
d:function(){
//......
}
}
obj1.a();//注册事件
obj2.c();//创建事件,并且把这个事件抛发出去
JS 的事件基础、事件侦听与抛发、的更多相关文章
- stopImmediatePropagation和stopPropagation (事件、防止侦听)
参考: ActionScript 3.0 Step By Step系列(六):学对象事件模型,从点击按扭开始 actionscript宝典 一.事件模型 egret中的事件模型和flash是一样的,但 ...
- Vue.js 源码分析(七) 基础篇 侦听器 watch属性详解
先来看看官网的介绍: 官网介绍的很好理解了,也就是监听一个数据的变化,当该数据变化时执行我们的watch方法,watch选项是一个对象,键为需要观察的数据名,值为一个表达式(函数),还可以是一个对象, ...
- Js 事件基础
一:js中常见得事件 (1) : 鼠标事件 click :点击事件 dblclick :双击事件 contextmenu : 右键单击事件 ...
- vue02 过滤器、计算和侦听属性、vue对象的生命周期、阻止事件冒泡和刷新页面
3. Vue对象提供的属性功能 3.1 过滤器 过滤器,就是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中. 定义过滤器的方式有两种. 3.1.1 使用Vue.fil ...
- js事件流、事件处理程序/事件侦听器
1.事件流 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档). 事件捕获 ...
- js基础——事件绑定(事件监听)
JavaScript事件一共有三种监听方法分别如下: 1.事件监听一夹杂在html标签内 <div id="box" onClick="alert('HELLO W ...
- Node.js 教程 05 - EventEmitter(事件监听/发射器 )
目录: 前言 Node.js事件驱动介绍 Node.js事件 注册并发射自定义Node.js事件 EventEmitter介绍 EventEmitter常用的API error事件 继承EventEm ...
- JavaScript DOM高级程序设计 4.3控制事件流和注册事件侦听器--我要坚持到底!
一.事件流 我们通过下面一个实例,进行说明. <body> <h1>Event Flow</h1> <ul id="nav"> &l ...
- Android事件侦听器回调方法浅谈
http://developer.51cto.com/art/201001/180846.htm Android事件侦听器作为视图View类的接口,其中包含有不少回调方法,比如:onClick():o ...
随机推荐
- mysql & Tomcat使用问题记录
mysql使用问题记录 1.mysql如何修改root密码 a.进入mysql安装目录b.登录 mysql -u root -pc.修改密码 mysql> SET PASSWORD FOR ro ...
- Flutter 学习路线图
Flutter 学习路线图 如果你真的觉得很难,坚持不了了,那就放弃,既然放弃了就不要抱怨没有得到. 选择你热爱的,坚持你选择的,不抱怨放弃的. 前言 Flutter越来越火,学习Flutter的人越 ...
- wr720n v4 折腾笔记(四):安装inode客户端njitclient
前记: 既然折腾到这里,那就不怕再折腾一下了,之前说过最终还是安装南浦月大神的固件,折腾了一圈,怎么不直接在官方界面上安装呢,这里给出直接安装的方法,就是修改固件头为wr720nv4. 0x01 修改 ...
- 使用scikit-learn解决文本多分类问题(附python演练)
来源 | TowardsDataScience 译者 | Revolver 在我们的商业世界中,存在着许多需要对文本进行分类的情况.例如,新闻报道通常按主题进行组织; 内容或产品通常需要按类别打上标签 ...
- GIS中地图投影的定义
我国的基本比例尺地形图[1:5千.1:1万.1:2.5万.1:5万.1:10万.1:25万.1:50万.1:100万]中,大于等于50万的均采用高斯-克吕格投影[Gauss-Kruger]:小于50万 ...
- 搬运工 Logstash
1,Logstash 简介 Logstash是一个开源数据收集引擎,具有实时管道功能.Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地. 通俗的说,就是搬运工 ...
- PHP序列化及反序列化分析学习小结
PHP反序列化 最近又遇到php反序列化,就顺便来做个总结. 0x01 PHP序列化和反序列化 php序列化:php对象 序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性.序 ...
- css指示箭头两种实现方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Python第十三章-网络编程
网络编程 一.网络编程基础 python 的网络编程模块主要支持两种Internet协议: TCP 和 UDP. 1.1通信协议 通信协议也叫网络传输协议或简称为传送协议(Communications ...
- flink 一分钟入门篇
1. 业务说:“…… bulabula……,这个需求很简单,怎么实现我不管?” 面对霸气侧漏的业务需求,由于没有大数据知识储备,咱心里没底,咱也不敢问,咱也不敢说,只能静下来默默储备.默默寻觅解决方案 ...