event 对象 小记
event对象的属性提供了有关事件的细节并且通过event对象的方法,可以控制事件的继续传播和阻止事件的默认行为
2级DOM Events 标准定义了一个标准的事件模型 被除了IE外的所有现代浏览器实现 在标准事件模型中event对象传递给事件句柄函数,在处理事件的时候获取事件发生的一些属性和控制事件的一些行为(冒泡和默认行为) 在标准事件模型中,Event的各种子接口定义了额外的属性,也就是可以定义多种种类的event对象 而IE只有一种event对象 应用于所有的事件处理
2级DOM event对象支持的方法
| 属性 | 描述 |
| bubbles | 指定事件是否起泡 |
| cancelable | 是否取消事件的默认行为 |
| currentTarget | 返回事件监听器触发该事件的元素 |
| eventPhase | 返回事件传播的当前阶段 |
| target | 事件的目标节点 |
| timeStamp | 返回事件生成的时间和日期 |
| type | 返回event表示的事件名称 |
区分currentTarget 和 target 在dom事件流中是结合了两种事件流的 事件捕获 和 事件冒泡
<div>
<button> test</button>
</div>
比如上面的结构 对于button的click事件的响应 是这样的传播过程 先是捕获阶段 从外层的div向下传播 此时的event.Phase是1 传播到目标节点 此时的event.Phase是2
然后冒泡 在向上传递到外层的div 此时的event.phase是3 触发该事件的元素就是event.target 实际处理该事件的元素就是event.currentTaget 同样是上面的例子 对于btn的click 事件 有可能在捕获阶段子外层div上进行处理 触发事件是点击的button(event.target) 处理的是外层的div(event.currentTarget) 具体的例子 请看这篇blog
2级DOM event对象 支持的方法
| 方法 | 描述 |
| iniEvent | 初始化新创建的event对象属性 |
| preventDefault | 阻止事件的默认行为(event对象的cancelable属性) |
| stopPropagation | 阻止事件的进一步传播 |
这里的preventDefault() 和 stopPropagation() 很好理解 主要介绍下 initEvent()方法 该方法用于初始化新事件对象的属性 新事件对象? 先跳转下
可以通过document.createEvent(eventType) 来创建新的事件对象
| 参数 | 事件接口 | 初始化方法 |
| HTMLEvents | HTMLEvent | initEvent |
| MouseEvents | MouseEvent | initMouseEvent |
| UIEvents | UIEvent | initUIEVent |
也就是我们想创建一个新的HTML事件对象 可以通过这样的方式
var evt = document.createEvent('HTMLEvents');
我们创建了新的事件对象后就可以对事件的属性进行设置(关于UIEvents还不大了解 欢迎交流) 跳转回来
在创建了新的event事件对象后 ,调用iniEvent()方法来初始化新事件对象的属性 iniEvent(eventType,canBubble,cancelable)
参数1 事件类型 click等 参数2 是否冒泡 参数3 cancelable 是否可以通过preventDefault()取消默认的行为
在创建完新的事件对象后 就要通过element.dispatchEvent(event) 方法来分派刚才创建的合成事件(也就是在特定的元素上触发我们刚才创建的事件)
下面通过一个完整的例子来简单的说明上面的方法的使用
在页面中有这样的一个超链接
<a href="https://www.baidu.com" id="test">baidu</a>
相应的js如下
var btn = document.getElementById('test');
btn.addEventListener('click',function(e){
console.log(1);
e.preventDefault();
})//在超链接上监听click事件
var evt = document.createEvent('HTMLEvents'); //创建新的事件对象
evt.initEvent('click',false,true); //配置新创建的事件对象 这里的设置是不冒泡 可以通过event.preventDefault()取消默认行为
btn.dispatchEvent(evt);//在btn上分派事件
在页面中可以看见响应了分派的click事件 并且没有进行页面的跳转
那么将initEvent()的第三个参数设置为false的时候呢
var btn = document.getElementById('test');
btn.addEventListener('click',function(e){
console.log(1);
e.preventDefault();
})
var evt = document.createEvent('HTMLEvents');
evt.initEvent('click',false,false); //这里配置成不可以通过event.preventDefault() 取消默认的行为
btn.dispatchEvent(evt);
会发现同样响应了click事件 但是页面发生了跳转 也就是event.preventDefault()没有起作用 这种情况下调用event.preventDefault() 并不会报错 只是没作用
2016.5.4 刚看到一个时间戳对委托事件处理的例子 拿过来分享
<div id="test">
<input type="text" id="abc" name="abc" />
<label for="abc">1111</label>
</div>
上面的例子中我通过委托在外层的id为test的div上绑定click事件的时候,但我们单击label的时候会冒泡一次,响应外层的click事件,又由于label是跟input相关联,会触发input的click事件,input的click事件冒泡,触发外层的click,也就造成了触发两次的情况,如何在不修改结构,也就是lable关联的情况下,只响应当前单击的元素的事件呢
时间戳
var evTimeStamp = 0;
document.getElementById("test").onclick = function(e) {
var now = +new Date();
if (now - evTimeStamp < 100) {
return;
}
evTimeStamp = now;
console.log(e.target);
}
这个思路就是如果当前元素去触发别的元素的click事件,now-evTimeStamp的时间会小于设置的时间100 就不会响应
event 对象 小记的更多相关文章
- JS:event对象下的target属性和取消冒泡事件
1.target 通过获取DOM元素 var box = document.getElementById("box"); document.box.onclick = functi ...
- 一张图轻松搞懂javascript event对象的clientX,offsetX,screenX,pageX区别
总是会被javascript的event对象的clientX,offsetX,screenX,pageX 弄得头晕,于是决定做个图来区分一下(画得我手那个酸呀....) 先总结下区别: event.c ...
- 【前端】原生event对象和jquery event对象的区别
标准DOM event对象转换成 jQuery event对象 $(event) jQuery event对象转换成 标准DOM event对象 event.originalEvent
- dom事件与event对象总结
1 事件:就是文档或浏览器窗口中发生的一些特定的交互瞬间. tips:js和xhtml的交互是通过当用户或浏览器操作网页时发生的事件来处理的. 1.1 事件流:即事件的顺序. 事件 ...
- html EVENT对象
Event 对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件通常与函数结合使用,函数不会在事件发生前被执行! onabort 图像的加 ...
- HTML DOM Event对象
我们通常把HTML DOM Event对象叫做Event事件 事件驱动模型 事件源:(触发事件的元素)事件源对象是指event对象 其封装了与事件相关的详细信息. 当事件发生时,只能在事件函数内部访问 ...
- IE8下获取iframe document EVENT对象的问题
在一个页面中设置iframe的document Onclick 事件获取在iframe中的document被点击的对象,W3C如下: document.getElementById('iframe的I ...
- javascript高级程序设计---Event对象二
鼠标事件 事件种类 鼠标事件指与鼠标相关的事件,主要有以下一些. (1)click事件 click事件当用户在Element节点.document节点.window对象上,单击鼠标(或者按下回车键)时 ...
- javascript高级程序设计---Event对象
事件是一种异步编程的实现方式,本质上是程序各个组成部分之间传递的特定消息. DOM的事件操作(监听和触发),都定义在EventTarget接口 该接口就是三个方法,addEventListener和r ...
随机推荐
- mongo3.x ssl版安装文件
搞c++好郁闷就是编译驱动.我都编疯了.虽然是按着教程走,但有时不同版本的机器有时各种奇奇原因莫妙奇妙编出问题.FQ出去啃英文解决的好吃力. 本来想更新一下项目的mongo从2.x 升级到3.x,然后 ...
- C++ 检测内存泄露工具 -- Windows平台
平台:Windows7 64bit,编译器G++(mingw) 工具:Dr Memory,项目主页:https://code.google.com/p/drmemory/ (可能要FQ,可能会很慢,所 ...
- sqlmap查找SQL注入漏洞入门
1.安装sqlmap sqlmap是一款非常强大的开源sql自动化注入工具,可以用来检测和利用sql注入漏洞.注意:sqlmap只是用来检测和利用sql注入点的,使用前请先使用扫描工具扫出sql注入点 ...
- 贴近用户体验的jQuery日期选择插件
分享一款贴近用户体验的jQuery日期选择插件.这是一款双日历jQuery日期选择时间插件pickerDateRange.效果图如下: 在线预览 源码下载 var dateRange = new ...
- MySQL慢日志监控脚本实例剖析
公司线上的 MySQL 慢日志,之前一直没有做好监控.趁着上周空闲,我就把监控脚本写了下,今天特地把代码发出来与51博友分享一下. 针对脚本的注解和整体构思,我会放到脚本之后为大家详解. 1 2 3 ...
- java中解决组件重叠的问题(例如鼠标移动组件时)
java中解决组件覆盖的问题! 有时候在移动组件的时候会出现两个组件覆盖的情况,但是你想让被覆盖的组件显示出来或者不被覆盖! 在设计GUI时已经可以定义组件的叠放次序了(按摆放组件的先后顺序) ...
- mongodb 监控分析命令
1. bin/mongostate 2.开启慢查询用于调试 正式要关闭 可以在客户端调用db.setProfilingLevel(级别) 命令来实时配置.可以通过db.getProfilingLeve ...
- [OpenCV] Face Detection
即将进入涉及大量数学知识的阶段,先读下“别人家”的博文放松一下. 读罢该文,基本能了解面部识别领域的整体状况. 后生可畏. 结尾的Google Facenet中的2亿数据集,仿佛隐约听到:“你们都玩儿 ...
- [转载]SharePoint 2013搜索学习笔记之搜索构架简单概述
Sharepoint搜索引擎主要由6种组件构成,他们分别是爬网组件,内容处理组件,分析处理组件,索引组件,查询处理组件,搜索管理组件.可以将这6种组件分别部署到Sharepoint场内的多个服务器上, ...
- 50 Android Hacks阅读笔记
Hack 1.善用weightSum和layout_weight. 问题提出:尝试做一个button的宽度是父View的一半的效果. 关键词:weightSum = 1 , layout_weight ...