HTML 事件(一) 事件的介绍
本篇主要介绍HTML中的事件知识:事件相关术语、DOM事件规范、事件对象。
其他事件文章
1. HTML 事件(一) 事件的介绍
目录
1. 事件相关术语:介绍事件相关的术语;如:事件类型、事件名称、事件目标等等。
2. DOM事件规范:介绍W3C目前定义的三种DOM事件规范:0、2、3级。
3. 事件类型:介绍了HTML目前的事件类型;如:UIEvent、FocusEvent、MouseEvent、WheelEvent、KeyboardEvent、CompositionEvent。
4. Event 事件对象:表示事件发生时的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态等等。
1. 事件相关术语
事件可表示为动作。以鼠标为例,移动、点击、悬停都是一种动作,也是事件。
事件类型(event type):表示事件的类型。如:MouseEvent(鼠标事件)、KeyboardEvent(键盘事件)。
事件名称(event name):表示事件的名称。如:click(单击)、dblclick(双击)。
事件目标(event target):表示与发生事件相关的目标对象。
事件处理程序(event handler):指处理事件的函数,即发生事件时,需调用的函数。
事件对象(event object):事件发生时,表示事件的状态,比如事件发生的目标、键盘按键的状态、鼠标的位置、鼠标按钮的状态等等。事件触发时,通过参数传递给事件处理程序。
HTML元素中的事件处理程序属性名称是以"on"为前缀,紧跟着事件的名称。如:onclick、onload。

2. DOM事件规范
W3C目前定义了三种DOM事件规范:0、2、3级。
2.1 DOM Level 0 Events
说明:0级DOM事件规范;最初的HTML文档事件规范,由Netscape Navigator 3 或 微软IE 3实现。
规范简介:
①定义了元素的基本事件。如:click、load等;
②以元素的属性方式调用事件。如:<button onclick="fn()"></buttom> 或者 htmlElement.onclick=function(){};
2.2 DOM Level 2 Events
说明:2级DOM事件规范;最后更新于2000年11月13日。
地址:https://www.w3.org/TR/DOM-Level-2-Events/
文档地址:https://www.w3.org/TR/DOM-Level-2-Events/DOM2-Events.pdf
规范简介:
①制定事件流,包含三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段。
②制定addEventListener()、removeEventListener()、dispatchEvent()等方法对元素事件进行操作。 [IE9之前的版本对应的为:attachEvent()、detachEvent()、fireEvent()];
③制定DocumentEvent接口,包含:createEvent()方法;
④制定Event对象,包含bubbles、cancelable、currentTarget、eventPhase、target、timeStamp、type属性,以及preventDefault()、stopPropagation()方法;
⑤扩展事件模块:UIEvent、MouseEvent、MutationEvent、HTMLEvent。
⑥移除KeyEvents。
2.3 DOM Level 3 Events
说明:3级DOM事件规范;最后更新于2015年12月15日。
地址:https://www.w3.org/TR/DOM-Level-3-Events/
主要规范:
①制定事件处理程序的触发排序规则:根据addEventListener()方法的注册顺序依次触发;
②事件流现在包含Window对象;
③修改resize事件为不可冒泡,修改mousemove事件为可取消默认操作;
④Event事件对象添加defaultPrevented属性、stopImmediatePropagation()方法,type属性将区分事件名称的大小写(DOM2不区分);
⑤弃用MutationEvent事件模块,弃用DOMFocusIn和DOMFocusOut事件;
⑥添加新的事件模块:CustomEvent、FocusEvent、KeyboardEvent、CompositionEvent、WheelEvent;UIEvent模块添加:focus、blur事件;MouseEvent模块添加:dblclick事件。
3. 事件类型
每一个事件都有归属的事件类型,不同的事件类型具有不同的信息。
3.1 UIEvent Types :用户界面事件类型;当用户与页面上的元素交互时触发
包含事件:load、unload、abort、error、select、resize、scroll。
扩展阅读:https://www.w3.org/TR/DOM-Level-3-Events/#events-uievents
3.2 FocusEvent :焦点事件; 当元素获得或失去焦点时触发
包含事件:blur、focus、focusin、focusout。
扩展阅读:https://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent
3.3 MouseEvent Types :鼠标事件类型;当鼠标在页面上执行操作时触发
包含事件:click、dblclick、mousedown、mouseenter、mouseleave、mousemove、mouseout、mouseover、mouseup。
扩展阅读:https://www.w3.org/TR/DOM-Level-3-Events/#events-mouseevents
3.4 WheelEvent Types :滚轮事件类型;当鼠标滚轮时触发
包含事件:wheel。
扩展阅读:https://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents
3.5 KeyboardEvent Types :键盘事件类型;当键盘在页面上执行操作时触发
包含事件:keydown、keyup、keypress。
扩展阅读:https://www.w3.org/TR/DOM-Level-3-Events/#events-keyboardevents
3.6 CompositionEvent Types :复合事件类型;当为IME输入字符时触发
IME:输入法编辑器(Input Method Editor)。
包含事件:compositionstart、compositionupdate、compositionend。
扩展阅读:https://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents
4. Event 事件对象
说明:Event 对象表示事件发生时的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态等等。
获取方式:事件触发时的第一个参数 或者 事件触发时调用window.event对象。
document.getElementById('btn').addEventListener('click', function(e){
console.log(window.event==e); // => true :触发时两者是一样
冒泡事件:当子元素触发某一事件时,父元素会触发相同时间(事件为允许冒泡)。
阻止后续处理程序:通过addEventListener()方法可以给元素的同一事件注册多个处理程序,在某个事件中调用了stopImmediatePropagation() 方法后,后面已经注册的处理程序将不会执行。比如,某个元素在click事件上注册了3个函数,在第2个函数上调用了stopImmediatePropagation()方法,第3个函数不会执行。
扩展阅读:https://developer.mozilla.org/en-US/docs/Web/API/Event
4.1 实例属性
readonly boolean bubbles :只读,获取此事件是否冒泡。
readonly boolean cancelable :只读,获取此事件是否可被撤销。true:事件可撤销。可调用preventDefault()取消后续的默认动作。flase:事件不可撤销。
readonly Object currentTarget :只读,获取正在处理此事件的对象,可以为Element、Document对象等等。
readonly boolean defaultPrevented :只读,表示是否已经调用过了preventDefault()。true:已经调用过了preventDefault()方法。
readonly int eventPhase :只读,表示事件的处理阶段:0表示没有正在处理,1表示捕获阶段,2表示目标阶段,3表示冒泡阶段。
readonly Object target :只读,获取触发此事件的对象。
readonly long timeStamp :只读,获取事件创建的时间。eg:console.log(e.timeStamp); // => 1455034313689
readonly string type :只读,获取事件名称(不包含前缀on,如:click)
readonly boolean isTrusted :只读,表示此事件是否由浏览器生成。true:由浏览器生成。false:通过JS创建,如:dispatchEvent()。
4.2 实例方法
void preventDefault() :终止事件的后续默认操作(事件要可撤销,即cancelable属性为true)。如:checkbox的click事件,执行这代码,元素不会被勾选和取消勾选。
document.getElementById('ckbox').onclick=function(e){
e.preventDefault(); // checkbox不会被勾选和取消勾选
};
方法示例
void stopImmediatePropagation() :阻止当前事件的冒泡行为并且阻止此元素上相同类型事件的后续处理函数。
document.body.onclick=function(e){
console.log('body-click');
};
document.getElementById('btn').addEventListener('click', function(e){
console.log('btn-click-1');
});
document.getElementById('btn').addEventListener('click', function(e){
console.log('btn-click-2');
// stopImmediatePropagation()方法将阻止当前事件的冒泡行为并且阻止此元素上相同类型事件的后续处理函数;
// 将会输出:btn-click-1、btn-click-2
// 若取消stopImmediatePropagation()方法,将会输出:btn-click-1、btn-click-2、btn-click-3、body-click
e.stopImmediatePropagation();
});
document.getElementById('btn').addEventListener('click', function(e){
console.log('btn-click-3');
});
方法示例
void stopPropagation() :阻止当前事件的冒泡行为。
document.body.onclick = function (e) {
console.log('body的click事件');
};
document.getElementById('btn').onclick = function (e) {
console.log('btn的click事件');
e.stopPropagation(); // 阻止此事件后续的冒泡行为,原先点击此事件,会触发body的相同类型事件
};
方法详解
4.3 currentTarget 与 target 属性的区别
currentTarget :获取正在处理此事件的对象。
target :获取触发此事件的对象。
冒泡阶段时两者的区别: 假设body和Button元素都注册了click事件;当点击Button元素时,body的click事件也会触发,此时在body的click事件内,currentTarget指向body元素,target指向Button元素。
示例:点击Button元素时的显示结果
document.body.onclick = function (e) {
console.log(e.currentTarget); // 指向body元素
console.log(e.target); // 若是冒泡事件时,指向最开始触发的元素。否则为元素自身。
};
document.getElementById('btn').onclick = function (e) {
console.log(e.currentTarget);
console.log(e.target);
};
HTML 事件(一) 事件的介绍的更多相关文章
- iOS:触摸事件和手势识别的介绍
触摸事件和手势识别的介绍 1.iOS的输入事件 UIKit可识别三种类型的输入事件: 触摸事件 运动事件 远程控制事件 iOS中许多事件对象都是UIEvent类的实例,UIEvent记录了事件所产生 ...
- 黑马vue---13、事件修饰符的介绍
黑马vue---13.事件修饰符的介绍 一.总结 一句话总结: .stop 阻止冒泡:input type="button" value="戳他" @click ...
- HTML 事件(二) 事件的注册与注销
本篇主要介绍HTML元素事件的注册.注销的方式. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流.事件委托 4. ...
- HTML 事件(三) 事件流与事件委托
本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...
- 三言两语之js事件、事件流以及target、currentTarget、this那些事
厉害了我的哥--你是如此简单我却将你给遗忘 放假前再看某文档,里边提到两个我既熟悉又陌生的概念target.currentTarget,说他熟悉我曾经看到过这两个事件对象的异同处,说他陌生吧?很不 ...
- Javascript事件模型系列(一)事件及事件的三种模型
一.开篇 在学习javascript之初,就在网上看过不少介绍javascript事件的文章,毕竟是js基础中的基础,文章零零散散有不少,但遗憾的是没有看到比较全面的系列文章.犹记得去年这个时候,参加 ...
- spring发布和接收定制的事件(spring事件传播)
spring发布和接收定制的事件(spring事件传播) 2012-12-26 20:05 22111人阅读 评论(2) 收藏 举报 分类: 开源技术(如Struts/spring/Hibernat ...
- iOS事件:触摸事件.运动事件.远程控制事件
iOS中,提供了事件处理:触摸事件,运动事件,远程控制事件.这很大得方便程序猿的工作. 这里先简单做个介绍: // // ViewController.m // demo // // Created ...
- 如何给ActiveX控件添加“事件”“属性”“标准事件”“自定义事件”等一些相关操作
上一篇小编带大家熟悉了一下ActiveX的建立以及相关的概念,(http://blog.csdn.net/u014028070/article/details/38424611) 本文介绍下如何给控件 ...
随机推荐
- 避免重复造轮子的UI自动化测试框架开发
一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...
- 阿里云直播 C# SDK 如何使用
阿里云直播SDK的坑 1.直播云没有单独的SDK,直播部分被封装在CDN的相关SDK当中. 2.针对SDK,没有相关Demo. 3.针对SDK,没有相关的文档说明. 4.针对SDK的说明,官网上的说明 ...
- iPhone Anywehre虚拟定位提示“后台服务未启动,请重新安装应用后使用”的解决方法
问题描述: iPhone越狱了,之后在Cydia中安装Anywhere虚拟定位,但是打开app提示:后台服务未启动,请重新安装应用后使用. 程序无法正常使用... 解决方法: 打开Cydia-已安装, ...
- x:bind不支持样式文件 或 此Xaml文件必须又代码隐藏类才能使用{x:Bind} 解决办法
这两天学习UWP开发,发现一个很有趣的问题,就是我题目中的描述的. 我习惯了在ResourceDictionary中写样式文件,但是发现用x:Bind时会有问题 如果是写在Style里,则提示 “x: ...
- JAVA面试题
在这里我将收录我面试过程中遇到的一些好玩的面试题目 第一个面试题:ABC问题,有三个线程,工作的内容分别是打印出"A""B""C",需要做的 ...
- 3种web会话管理的方式
http是无状态的,一次请求结束,连接断开,下次服务器再收到请求,它就不知道这个请求是哪个用户发过来的.当然它知道是哪个客户端地址发过来的,但是对于我们的应用来说,我们是靠用户来管理,而不是靠客户端. ...
- margin折叠-从子元素margin-top影响父元素引出的问题
正在做一个手机端电商项目,顶部导航栈的布局是一个div包含一个子div,如果给在正常文档流中的子div一个垂直margin-top,神奇的现象出现了,两父子元素的边距没变,但父div跟着一起往下走了! ...
- cesium自定义气泡窗口infoWindow
一.自定义气泡窗口与cesium默认窗口效果对比: 1.cesium点击弹出气泡窗口显示的位置固定在地图的右上角,默认效果: 2.对于习惯arcgis或者openlayer气泡窗口样式的giser来说 ...
- ABAP实现屏幕自己刷新和跳转功能
ABAP开发工程中,有时候需要让跳转出的屏幕自动实现跳转和刷新的功能,该功能的实现需要在屏幕PBO 里面调用相应的事件执行. 关键代码为: SET TITLEBAR ' 屏幕自动程序'. IF g_c ...
- crontab介绍
1.Cron的启动与关闭 由于Cron是Linux的内置服务,可以用以下的方法启动.关闭这个服务: /sbin/service crond start //启动服务/sbin/se ...