Event 对象的属性和方法
事件触发时,会将一个 Event 对象传递给事件处理程序,比如:
document.getElementById("testText").addEventListener("keydown", function (event) { alert(event.keyCode); }, false);
事件类型
DOM 事件类型是分为 UIEvent、UIEvent:KeyEvent、UIEvent:MouseEvent,不同的事件有不同的属性和方法,但常用的来说我们都不会用错,比如我们不会在鼠标事件中去取键盘值(Ctrl、Alt、Shift 除外),所以我们没有必要深究。
该对象的属性和方法有:
view 只读,对象,发生事件的 Window 对象。
type 只读,字符串。比如鼠标点击事件的类型:click。
eventPhase 只读,数字,事件流正经历的阶段。1-捕获,2-目标,3-冒泡。
target 只读,对象,派发事件的目标对象。比如鼠标是点击在哪个按钮上的。
currentTarget 只读,对象,当前正在调用监听器的对象,也就是当前 addEventListener 是绑定在哪个对象上的。
timeStamp 只读,数字,用毫秒表示事件发生时距计算机开机的时间。
cancelable 只读,布尔,处理事件的默认行为是否可以停止。主要针对一些系统事件,如果值为 true,则 event 的 preventDefault 方法可以使用,否则不可用。
preventDefault() 阻止浏览器的默认行为,比如在文本框中打字触发 keydown,如果 keydown 事件处理程序中调用了 preventDefault(),所打的字就不会跑到文本框中去,注意,此时不要弹出 alert 对话框,否则可能不起作用。IE 中在事件处理程序中用 return false 实现类似功能。
bubbles 只读,布尔,事件是否开启冒泡功能。
stopImmediatePropagation()停止当前的事件流传播,并让当前对象(不仅parent了)的次优先级的所有监听都不执行。
stopPropagation() 停止当前的事件流传播,但不会停止当前正在处理的对象的其他监听事件的执行。IE 中用 event.cancelBubble = true 实现类似功能。
cancelBubble 布尔,是否取消冒泡,不建议使用,用 stopPropagation() 代替。
preventBubble() 阻止冒泡,不建议使用,用 stopPropagation() 代替。
preventCapture() 阻止捕获,不建议使用,用 stopPropagation() 代替。
detail 只读,数字,提供时间的额外信息,对于 click 事件、mousedown 事件和 mouseup 事件,这个字段代表点击的次数。
isChar 只读,布尔,按下的按键值是否是字符,比如按下 Ctrl 键时,就返回 false。不过您在 Firefox 中测试时,该值总是 false,Firefox 官方已经说明这是一个 bug。
altKey 只读,布尔,是否按下了 Alt 键。
ctrlKey 只读,布尔,是否按下了 Ctrl 键。
shiftKey 只读,布尔,是否按下了 Shift 键。
metaKey 只读,布尔,是否按下了 Meta 键。
下面一些属性很有意思,请仔细区别
charCode 只读,数字,字符(英文、数字、符号)的 Unicode 值。
- 只用于 keypress。
keyCode 只读,数字,键盘按键值。
- 用于 keypress 时:返回非字符按键值(除 Ctrl、Shift、Alt、Caps Lock、单行文本框中按向上键等);
- 用于 keydown、keyup 时:返回任意键值。
button 只读,数字,鼠标按键值。
- 用于 click 时:0-左键。
- 用于 mousedown、mouseup 时:0-左键,1-中间键(滚轮),2-右键。
which 只读,数字,键盘按键值或鼠标按键值。
- 用于 keypress 时:等同于 charCode + 回退键 + 回车键;
- 用于 keydown、keyup 时:返回任意键值;
- 用于 click 时:1-左键,与 button 的值略有区别。
- 用于 mousedown、mouseup 时:1-左键,2-中间键(滚轮),3-右键,与 button 的值略有区别。
可以看出,which 只有一点没有包括:那就是 keypress 时,不如 keyCode 那么全,但实际上,keypress 事件中用于非字符键的情况较少,所以一般还是用 which 代替全部。
注意:
事件分发时(时间执行过程中)添加的监听不会立即触发,可能会在下一个事件流(比如冒泡阶段)中触发。
如果添加多个相同的 eventListener,如下,三个参数完全相同,并且第二个参数不是匿名函数。
document.getElementById("myBox").addEventListener("click", Go, false);
document.getElementById("myBox").addEventListener("click", Go, false);
document.getElementById("myBox").addEventListener("click", Go, false);
会抛弃多余的,只保留一个,对应的 removeEventListener 也只用一次就可以了(removeEventListener 用法和 addEventListener 完全相同)。
但如果是第二个参数是匿名函数,比如:
document.getElementById("outDiv").addEventListener("click", function () { document.getElementById("info").innerHTML += "1";}, false);
document.getElementById("outDiv").addEventListener("click", function () { document.getElementById("info").innerHTML += "1";}, false);
document.getElementById("outDiv").addEventListener("click", function () { document.getElementById("info").innerHTML += "1";}, false);
则三个均有效,并且无法用 removeEventListener 除去。
关于this
事件处理程序中,this 变成了触发事件的控件,但我们仍推荐用 event.target 或 event.currentTarget。
早期浏览器中事件监听是怎么绑定的
在 DOM0 中,我们用 obj.onclick = FuncName,由于兼容性好,应用非常广泛,只是功能不如 addEventListener 强大。
内存问题
前面提到了许多使用匿名函数的地方,有时这是没办法的,但这会导致内存问题。
一旦事件绑定之后,该绑定代码作用域的变量就都保留下来,不会被 JavaScript 引擎回收,这可能会引起占用大量内存的问题,由于 removeEventListener 无法删除匿名函数的事件处理程序,只有在物件(比如按钮)去除之后,该内存才可能得到回收。
Event 对象的属性和方法的更多相关文章
- DOM的event对象的属性和方法
属性/方法 类型 是否可读写 描写叙述 altKey Boolean 读写 指示是否按下alt键 bubbles Boolean 读 指示事件是否冒泡 button Intrger 读写 鼠标事件发生 ...
- Javascript常用对象的属性和方法
javascript为我们提供了一些非常有用的常用内部对象和方法.用户不需要用脚本来实现这些功能.这正是基于对象编程的真正目的. 在javascript提供了string(字符串).math(数值计算 ...
- javascript事件与event对象的属性
javascript事件列表解说 事件 浏览器支持 解说 一般事件 onclick IE3.N2 鼠标点击时触发此事件 ondblclick IE4.N4 鼠标双击时触发此事件 onmousedown ...
- JS中的RegExp对象常用属性和方法
JavaScript提供了一个RegExp对象来完成有关正则表达式的操作和功能,每一条正则表达式模式对应一个RegExp实例.有两种方式可以创建RegExp对象的实例. 使用RegExp的显式构造函数 ...
- location对象的属性和方法应用(解析URL)
本文将与大家分享下location对象使用属性和方法来解析URL的实例,感兴趣的朋友可以参考下,希望对你有所帮助 location对象提供了很多属性和方法用来解析URL. 复制代码代码如下: &l ...
- Ajax01 什么是ajax、获取ajax对象、ajax对象的属性和方法
1 什么是ajax ajax是一种用来改善用户体验的技术,其本质是利用浏览器提供的一个对象(XMLHttpRequest,也可称之为ajax对象) 向服务器发送异步请求;服务器返回部分数据(不是一个完 ...
- javascript面向对象(给对象添加属性和方法的方式)
1.在定义对象时,直接把属性和方法添加 <script type="text/JavaScript"> //给对象直接在定义时添加属性和方法 var g ...
- 理解Python中的类对象、实例对象、属性、方法
class Animal(object): # 类对象 age = 0 # 公有类属性 __like = None # 私有类属性 def __init__(self): # 魔法方法 self.na ...
- HTML DOM对象的属性和方法
HTML DOM对象的属性和方法 HTML DOM 对象有几种类型: 1.Document 类型 在浏览器中,Document 对象表示整个 HTML 文档. 1.1属性 引用文档的子节点 docum ...
随机推荐
- AndroidStudio快捷键使用记录
输入logt+回车 自动增加Tag的定义. private static final String TAG = "MainActivity"; 输入logd+回车 自动增加d级别的 ...
- PyCharm的模板设置
在File—settings—Editor—File and Code Templates—Python script 脚本里添加 编辑内容 (a)shebang行 #!/usr/bin/python ...
- pandas中一列含有多种数据类型的转换:科学计算法转浮点数、字符映射
import pandas as pd import re def getNum(x): """ 科学计数法和字符转浮点数 """ if r ...
- AWS之SSH登录:使用 PuTTY 从 Windows 连接到 Linux 实例
使用 PuTTY 从 Windows 连接到 Linux 实例 启动您的实例之后,您可以连接到该实例,然后像使用您面前的计算机一样来使用它. 注意 启动实例后,需要几分钟准备好实例,以便您能连接到实例 ...
- BOM跟DOM的区别和关联
BOM 1. BOM是Browser Object Model的缩写,即浏览器对象模型. 2. BOM没有相关标准. 3. BOM的最根本对象是window. 从1可以看出来:BOM和浏览器关系密切. ...
- python中的sockeserver模块简单实用
1. socketserver模块简介 在python的socket编程中,实用socket模块的时候,是不能实现多个连接的,当然如果加入其它的模块是可以的,例如select模块,在这里见到的介绍下s ...
- Python ————反射机制
python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删除成员. ...
- mysql-5.7.16-winx64解压版安装超详细图文教程
1.安装: 将下载的mysql-5.7.16-winx64压缩包解压后的整个目录放在自己喜欢的位置,我的放在D盘根目录下 2.配置: 进入mysql-5.7.16-winx64目录,将里面的my-de ...
- Linux之文档与目录结构 (/ 用法, 相对路径,绝对路径)
Linux之文档与目录结构 Linux文件系统结构 Linux目录结构的组织形式和Windows有很大的不同.首先Linux没有“盘(C盘.D盘.E盘)”的概念.已经建立文件系统的硬盘分区被挂载到 ...
- 微信小程序奇奇怪怪的语法
这... <view class="body"> <view class="nav bc_white"> <view class= ...