浏览器支持的事件数量在快速增长,来源有三个(1)3级DOM事件规范(2)HTML5规范及相关衍生规范的大量新API所定义(3)基于触屏的移动设备的出现。
书中关于事件的分类感觉很混乱,不用太纠结。大致可以分为几类
(1)依赖设备的输入事件,比如 mousedown touchmove
(2)独立于设备的输入时间,比如 click 可以通过鼠标、键盘、触感设备来实现
(3)用户界面事件
(4)特定API事件 比如 dragstart
(5)计时器和错误处理程序。
表单的submit和reset,表单元素的 click,文字、选择项元素的 change,焦点变化引起的 focus和blur。 时间处理取消:submit和reset的默认操作,某些click事件也是如此。 focus和blur不会冒泡,但其他所有表单事件都可以。 textarea中不论何时文本插入都会触发(不同于change事件)。
发生在浏览器窗口本身的事件:load, DOMContentLoaded, readystatechange, unload, beforeunreload, onerror。
img这样的元素也能给load和error注册处理程序。
focus和blur也能用作Window事件。
浏览器窗口大小调整时候回出发resize和scroll时间。
click, mousemove, mouseup, mousedown, dbclick, contextmenu, mouseover, mouseout(IE提供的不冒泡的版本是mouseenter和mouseleave), mousewheel。
keyup, keydown, keypress
3级DOM时间规范发展的过程中,会增加新事件替代一些事件,还有一些事件被废弃,关于一些事件如何使用更规范,可以参考这部分的介绍进行阅读,不再赘述。
第22章会介绍HTML5定义的大量新的Web应用的API,这里列出这些HTML5和Web应用的事件:
- 音频和视频的事件
- 操作系统的拖放操作(此处应该指的浏览器吧?)
- 历史管理机制,设计hashchange和popstate
- 为表单定义了大量新特性,包括验证机制
- 增加了对Web离线应用的支持
- 可以使用message事件进行异步通信,通信受限于同源策略。它与WebWorker通信、Server-Sent、WebSocket进行网络通信类似。
- 不在窗口、文档和文档元素上 触发的时间,比如I/O的进度
- 少量庞杂的事件类型,比如在Web存储上的storage事件
包含触摸、旋转、手势等事件。
给对象目标或文档元素设置属性,例如:
window.onload = function(){}
设置HTML标签属性为事件处理程序,例如:
<button onclick="alert('thank you')"></button>
addEventListener:
- 不会影响已经通过onclick属性的值
- 能用它注册多个处理程序,并且会按照注册的顺序依次调用
attachEvent:
IE提供的事件处理方法
该部分介绍事件处理程序如何调用,也会介绍时间的传播机制。
通常把事件对象作为他们的一个参数,获取方法IE会比较特别,需要通过window.event来获取。
同样在IE上this是指向到Window,需要改写代码来修改指向。
讲解令人费解,不是太重要,跳过。
返回值为false通常是用来阻止默认行为
- 通过设置对象属性、或者HTML属性注册的处理程序,优先调用。
- 使用addEventListener注册的处理程序,按照注册顺序调用。
- 使用attachEVent注册的处理程序,可能按照任何顺序调用。
该部分讲解的太粗略了,不足以体现该知识的重要性。
有三种技术:
- event.preventDefault()
- event.returnValue = false
- return false