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

js事件小记

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 就不会响应

具体参考  单击labe时click事件被触发两次的坑

event 对象 小记的更多相关文章

  1. JS:event对象下的target属性和取消冒泡事件

    1.target 通过获取DOM元素 var box = document.getElementById("box"); document.box.onclick = functi ...

  2. 一张图轻松搞懂javascript event对象的clientX,offsetX,screenX,pageX区别

    总是会被javascript的event对象的clientX,offsetX,screenX,pageX 弄得头晕,于是决定做个图来区分一下(画得我手那个酸呀....) 先总结下区别: event.c ...

  3. 【前端】原生event对象和jquery event对象的区别

    标准DOM event对象转换成 jQuery event对象 $(event) jQuery event对象转换成 标准DOM event对象 event.originalEvent

  4. dom事件与event对象总结

    1 事件:就是文档或浏览器窗口中发生的一些特定的交互瞬间.    tips:js和xhtml的交互是通过当用户或浏览器操作网页时发生的事件来处理的. 1.1 事件流:即事件的顺序.        事件 ...

  5. html EVENT对象

    Event 对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件通常与函数结合使用,函数不会在事件发生前被执行! onabort 图像的加 ...

  6. HTML DOM Event对象

    我们通常把HTML DOM Event对象叫做Event事件 事件驱动模型 事件源:(触发事件的元素)事件源对象是指event对象 其封装了与事件相关的详细信息. 当事件发生时,只能在事件函数内部访问 ...

  7. IE8下获取iframe document EVENT对象的问题

    在一个页面中设置iframe的document Onclick 事件获取在iframe中的document被点击的对象,W3C如下: document.getElementById('iframe的I ...

  8. javascript高级程序设计---Event对象二

    鼠标事件 事件种类 鼠标事件指与鼠标相关的事件,主要有以下一些. (1)click事件 click事件当用户在Element节点.document节点.window对象上,单击鼠标(或者按下回车键)时 ...

  9. javascript高级程序设计---Event对象

    事件是一种异步编程的实现方式,本质上是程序各个组成部分之间传递的特定消息. DOM的事件操作(监听和触发),都定义在EventTarget接口 该接口就是三个方法,addEventListener和r ...

随机推荐

  1. mongo3.x ssl版安装文件

    搞c++好郁闷就是编译驱动.我都编疯了.虽然是按着教程走,但有时不同版本的机器有时各种奇奇原因莫妙奇妙编出问题.FQ出去啃英文解决的好吃力. 本来想更新一下项目的mongo从2.x 升级到3.x,然后 ...

  2. C++ 检测内存泄露工具 -- Windows平台

    平台:Windows7 64bit,编译器G++(mingw) 工具:Dr Memory,项目主页:https://code.google.com/p/drmemory/ (可能要FQ,可能会很慢,所 ...

  3. sqlmap查找SQL注入漏洞入门

    1.安装sqlmap sqlmap是一款非常强大的开源sql自动化注入工具,可以用来检测和利用sql注入漏洞.注意:sqlmap只是用来检测和利用sql注入点的,使用前请先使用扫描工具扫出sql注入点 ...

  4. 贴近用户体验的jQuery日期选择插件

    分享一款贴近用户体验的jQuery日期选择插件.这是一款双日历jQuery日期选择时间插件pickerDateRange.效果图如下: 在线预览   源码下载 var dateRange = new ...

  5. MySQL慢日志监控脚本实例剖析

    公司线上的 MySQL 慢日志,之前一直没有做好监控.趁着上周空闲,我就把监控脚本写了下,今天特地把代码发出来与51博友分享一下. 针对脚本的注解和整体构思,我会放到脚本之后为大家详解. 1 2 3 ...

  6. java中解决组件重叠的问题(例如鼠标移动组件时)

    java中解决组件覆盖的问题!     有时候在移动组件的时候会出现两个组件覆盖的情况,但是你想让被覆盖的组件显示出来或者不被覆盖! 在设计GUI时已经可以定义组件的叠放次序了(按摆放组件的先后顺序) ...

  7. mongodb 监控分析命令

    1. bin/mongostate 2.开启慢查询用于调试 正式要关闭 可以在客户端调用db.setProfilingLevel(级别) 命令来实时配置.可以通过db.getProfilingLeve ...

  8. [OpenCV] Face Detection

    即将进入涉及大量数学知识的阶段,先读下“别人家”的博文放松一下. 读罢该文,基本能了解面部识别领域的整体状况. 后生可畏. 结尾的Google Facenet中的2亿数据集,仿佛隐约听到:“你们都玩儿 ...

  9. [转载]SharePoint 2013搜索学习笔记之搜索构架简单概述

    Sharepoint搜索引擎主要由6种组件构成,他们分别是爬网组件,内容处理组件,分析处理组件,索引组件,查询处理组件,搜索管理组件.可以将这6种组件分别部署到Sharepoint场内的多个服务器上, ...

  10. 50 Android Hacks阅读笔记

    Hack 1.善用weightSum和layout_weight. 问题提出:尝试做一个button的宽度是父View的一半的效果. 关键词:weightSum = 1 , layout_weight ...