第一章 事件流
事件:是文档或浏览器窗口中发生的、特定的交互瞬间。JavaScript和HTML之间的交互都是通过事件来实现的。
事件流:描述的是从页面中接受事件的顺序
IE:事件冒泡流
Netscape:事件捕获流
事件冒泡:即事件最开始由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播至最不具体的那个节点(文档)。
事件捕获:不太具体的节点应该更早接收到事件,而最具体的节点最后接收到事件。
第二章 事件处理程序
1、HTML事件处理程序
HTML事件的缺点:HTML和JS代码紧密的耦合在一起。如果需要改事件处理程序,JS代码和HTML都需要进行修改。
例子:
2、DOM0级事件处理程序
较传统的方式:把一个函数赋值给一个事件的处理程序属性。是用的比较多的方法,原因是简单,有跨浏览器的优势。没有HTML事件的缺点。优点:可以给一个元素添加多个事件处理程序,按顺序执行。
例子:
3、DOM2级事件处理程序
DOM2级事件定义了两个方法:
用于处理指定和删除事件处理程序的操作
addEventListener()和removeEventListner()
接收三个参数:
语法为:
element.addEventListener(type,listener,useCapture)
要处理的事件名、作为事件处理程序的函数和布尔值(true-->表示在捕获阶段调用事件处理程序,false-->表示在冒泡阶段调用事件处理程序(可以兼容各种浏览器))。
•其中element是要绑定函数的对象。
•type是事件名称,要注意的是"onclick"要改为"click","onblur"要改为"blur",也就是说事件名不要带"on"。
•listener当然就是绑定的函数了,记住不要跟括号
•最后一个参数是个布尔值,表示该事件的响应顺序
优点:可以给一个元素添加多个事件处理程序,按顺序执行。
注意:用addEventListener()添加的事件,只能用removeEventListner()移除。且在IE中不好使。
例子:
4、IE事件处理程序
attachEvent()添加事件
detaEvent()删除事件
接收相同的两个参数:事件处理程序的名称(事件需要把on加上)和事件处理程序的函数
不使用第三个参数的原因:IE8以及更早的浏览器版本只支持事件冒泡。
支持IE事件处理程序的浏览器:IE和OPERA
例子:
注意:从IE11开始,已经开始DOM2级事件处理程序,而不再使用IE事件处理程序。
5、跨浏览器的事件处理程序