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 ...
随机推荐
- POJ 3320 Jessica's Reading Problem
Jessica's Reading Problem Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6001 Accept ...
- EDM博主笔记:EDM邮件营销的几个细节问题
其实说起EDM邮件营销很多做过的人都知道,目前国内邮件营销的效果其实是比较差的,为什么?因为国内没有多少使用邮件的习惯,如果不是工作所需估计很多的人都几天不碰邮件了,但是反观国外 邮件是其日常的一部分 ...
- 如何让js不产生冲突,避免全局变量的泛滥,合理运用命名空间
为了避免变量之间的覆盖与冲突,可以生成命名空间,命名空间是一种特殊的前缀,在js中,通过{ }对象实现. 在不同的匿名函数中,根据功能声明一个不同的命名空间,每个匿名函数中GLOBAL对象的属性都不直 ...
- 【MVC 过滤器的应用】ASP.NET MVC 如何统计 Action 方法的执行时间
代码如下: using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; u ...
- java 去掉html标签
使用正则表达式删除HTML标签. import java.util.regex.Matcher; import java.util.regex.Pattern; public class HTMLSp ...
- codeforces MUH and Cube Walls
题意:给定两个序列a ,b, 如果在a中存在一段连续的序列使得 a[i]-b[0]==k, a[i+1]-b[1]==k.... a[i+n-1]-b[n-1]==k 就说b串在a串中出现过!最后输出 ...
- iOS-文字自适应
1.自动改变Label的宽和高 - (void)createLabel1 { UILabel * label = [[UILabel alloc] initWithFrame:CGRectZero]; ...
- ASP.NET HTTP模拟提交通用类 GET POST
用法: WebRequestSugar ws = new WebRequestSugar(); //可选参数 //ws.SetAccept //ws.SetContentType //ws.SetC ...
- 阅读Nosql代码有感
这一年总得来说,读书的时间不多.一是因为时间啥关系,这一年一直在跟着项目走,或者被项目牵着走,几乎所有的时间和精力全部被拴在几个项目上:不过所幸今年创业失败,又回去上班了,时间相对空余了一些. 双十一 ...
- Python+Selenium进行UI自动化测试项目中,常用的小技巧1:读取excel表,转化成字典(dict)输出
从今天开始我将会把在项目中遇到的问题,以及常用的一些技巧来分享出来,以此来促进自己的学习和提升自己:更加方便我以后的查阅. 现在要说的是:用Python来读取excel表的数据,返回字典(dict), ...