js-权威指南学习笔记17
第十七章 事件处理
1、事件处理程序或事件监听程序是处理或响应事件的函数。
2、事件对象是与特定事件相关且包含有关该事件详细信息的对象。
3、响应通过键盘改变焦点的表单元素在得到和失去焦点时会分别出发focus和blur事件。
4、focus和blur事件不会冒泡,但其他所有表单事件都可以。IE定义了focusin和focusout事件可以冒泡。
5、DOMContentLoaded和readystatechange是load事件的替代方案,当文档和其元素为操作就绪,但外部资源完全加载完毕之前,浏览器就会尽早触发它们。
6、单击鼠标右键时,浏览器通常会显示上下文菜单。在显示菜单之前,它们通常会出发contextmenu事件,而取消这个事件就可以阻止菜单的显示。
7、mouseover和mouseout事件会冒泡,而IE提供的mouseenter和mouseleave不会冒泡。
8、当keydown事件产生可打印字符时,在keydown和keyup之间会出发另外一个keypress事件。当按下键重复产生字符时,在keyup事件之前可能产生很多keypress事件。keypress是较高级的文本事件,其事件对象指定产生的字符而非按下的键。
9、HTML5包含了对离线Web应用的支持。相关的两个最重要事件是offline和online,无论何时浏览器失去获得到网络连接时都会在Window对象上出发它们。
10、注册事件处理程序最简单的方式就是通过设置事件目标的属性为所需事件处理程序函数。缺点是每个事件目标对于每种事件类型最多只能有一个处理程序。
11、在HTML标签中设置事件处理程序不应该用大括号包围且不用function关键字。避免使用。
12、addEventListener()方法最后一个参数是一个布尔值,通常传入false,如果传入true,那么函数将注册为捕获事件处理程序。
13、IE中使用attachEvent()注册的事件处理程序作为函数调用,它们的this值是全局对象。可用call()对this进行更改。
14、事件处理程序在定义时的作用域而非调用时的作用域中执行,并且它们能存取那个作用域中的任何一个本地变量。通过HTML属性来注册事件处理程序是一个例外,它们被转换为能存取全局变量的顶级函数而非任何本地变量。
15、通常情况下,返回值false就是告诉浏览器不要执行这个事件相关的默认操作。
16、事件处理程序的调用顺序:1、通过设置对象属性或者HTML属性注册的处理程序优先调用。2、使用addEventListener()注册的处理程序按照它们的注册顺序调用。3、attachEvent()可能按照任何顺序调用。
17、事件冒泡为在大量单独文档元素上注册处理程序提供了替代方案,即在共同的祖先元素上注册一个处理程序来处理所有的事件。(事件委托/事件代理)
18、发生在文档元素上的大部分事件都会冒泡,值得注意的例外是focus、blur、scroll事件。文档元素上的load事件会冒泡,但它会在Document对象上停止冒泡而不会传播到window对象,只有当整个文档都加载完毕时才会出发Window对象的load事件。
19、事件冒泡是事件传播的第三个阶段。目标对象本身的事件处理程序调用是第二个阶段。第一个阶段甚至发生在目标处理程序调用之前,成为捕获阶段。在目标对象本身上注册的捕获事件处理程序不会被调用。
20、阻止事件传播:stopPropagation()方法,IE事件对象有一个cancelBubble属性,设置为true能阻止事件进一步传播。