本篇主要介绍HTML中的事件知识:事件相关术语、DOM事件规范、事件对象。

其他事件文章

1. HTML 事件(一) 事件的介绍

2. HTML 事件(二) 事件的注册与注销

3. HTML 事件(三) 事件流、事件委托

4. 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);
};
End
菜单加载中...

HTML 事件(一) 事件的介绍的更多相关文章

  1. iOS:触摸事件和手势识别的介绍

    触摸事件和手势识别的介绍 1.iOS的输入事件  UIKit可识别三种类型的输入事件: 触摸事件 运动事件 远程控制事件 iOS中许多事件对象都是UIEvent类的实例,UIEvent记录了事件所产生 ...

  2. 黑马vue---13、事件修饰符的介绍

    黑马vue---13.事件修饰符的介绍 一.总结 一句话总结: .stop 阻止冒泡:input type="button" value="戳他" @click ...

  3. HTML 事件(二) 事件的注册与注销

    本篇主要介绍HTML元素事件的注册.注销的方式. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流.事件委托 4. ...

  4. HTML 事件(三) 事件流与事件委托

    本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...

  5. 三言两语之js事件、事件流以及target、currentTarget、this那些事

    厉害了我的哥--你是如此简单我却将你给遗忘   放假前再看某文档,里边提到两个我既熟悉又陌生的概念target.currentTarget,说他熟悉我曾经看到过这两个事件对象的异同处,说他陌生吧?很不 ...

  6. Javascript事件模型系列(一)事件及事件的三种模型

    一.开篇 在学习javascript之初,就在网上看过不少介绍javascript事件的文章,毕竟是js基础中的基础,文章零零散散有不少,但遗憾的是没有看到比较全面的系列文章.犹记得去年这个时候,参加 ...

  7. spring发布和接收定制的事件(spring事件传播)

    spring发布和接收定制的事件(spring事件传播) 2012-12-26 20:05 22111人阅读 评论(2) 收藏 举报  分类: 开源技术(如Struts/spring/Hibernat ...

  8. iOS事件:触摸事件.运动事件.远程控制事件

    iOS中,提供了事件处理:触摸事件,运动事件,远程控制事件.这很大得方便程序猿的工作. 这里先简单做个介绍: // // ViewController.m // demo // // Created ...

  9. 如何给ActiveX控件添加“事件”“属性”“标准事件”“自定义事件”等一些相关操作

    上一篇小编带大家熟悉了一下ActiveX的建立以及相关的概念,(http://blog.csdn.net/u014028070/article/details/38424611) 本文介绍下如何给控件 ...

随机推荐

  1. ASP.NET Aries 入门开发教程8:树型列表及自定义右键菜单

    前言: 前面几篇重点都在讲普通列表的相关操作. 本篇主要讲树型列表的操作. 框架在设计时,已经把树型列表和普通列表全面统一了操作,用法几乎是一致的. 下面介绍一些差距化的内容: 1:树型列表绑定: v ...

  2. UWP学习目录整理

    UWP学习目录整理 0x00 可以忽略的废话 10月6号靠着半听半猜和文字直播的补充看完了微软的秋季新品发布会,信仰充值成功,对UWP的开发十分感兴趣,打算后面找时间学习一下.谁想到学习的欲望越来越强 ...

  3. ABP文档 - 异常处理

    文档目录 本节内容: 简介 启用错误处理 非AJAX请求 显示异常 UserFriendlyException Error 模型 AJAX 请求 异常事件 简介 这个文档针对Asp.net Mvc和W ...

  4. BootStrap_02之全局样式及组件

    1.BootStrap指定的四种屏幕尺寸: ①超大PC屏幕--lg(large):w>=1200px: ②中等PC屏幕--md(medium):1200px>w>=992px: ③P ...

  5. CSS float 浮动属性

    本篇主要介绍float属性:定义元素朝哪个方向浮动. 目录: 1. 页面布局方式:介绍文档流.浮动层以及float属性. 2. float:left :介绍float为 left 时的布局方式. 3. ...

  6. AFNetworking 3.0 源码解读(九)之 AFNetworkActivityIndicatorManager

    让我们的APP像艺术品一样优雅,开发工程师更像是一名匠人,不仅需要精湛的技艺,而且要有一颗匠心. 前言 AFNetworkActivityIndicatorManager 是对状态栏中网络激活那个小控 ...

  7. Python(九)Tornado web 框架

    一.简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过 ...

  8. php cryptr 加密函数

    class CryptHelper { /** * 加密 * @param unknown $password * @param unknown $salt * @return string */ p ...

  9. (整理)MyBatis入门教程(一)

    本文转载: http://www.cnblogs.com/hellokitty1/p/5216025.html#3591383 本人文笔不行,根据上面博客内容引导,自己整理了一些东西 首先给大家推荐几 ...

  10. SpringMVC入门

    Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模 ...