事件模型
绑定事件
事件监听函数中的this指向的是这个元素节点,若是箭头函数其this会指向宿主环境,可能是顶层对象,所以监听函数中若想使用this就不要使用监听韩素
共有三种方式绑定事件:
- HTML的
on前缀属性(其实是GlobalEventHandlers接口的属性):要求属性值是触发事件执行的js代码,所以不能是函数名,而是执行函数的语句 - Element节点的
on前缀属性:要求是绑定的是监听函数,为同一事件属性绑定多个函数时会覆盖掉前面绑定的监听函数 - 使用
EventTarget接口的方法:可以为同一个事件绑定多个不同的监听函数;可以指定触发阶段;不仅仅DOM实现了该接口,如XMLHttpRequest和window等内置对象也可以使用该接口的方法
事件流
当父元素和子元素绑定了同一个事件时,该事件流会在父元素与子元素之间传播一个来回,共有三个阶段:
- 从父元素到子元素节点,称为捕获阶段
- 到达目标节点时,称为目标阶段
- 又从子元素回传给父元素,称为冒泡阶段
使用EventTarget接口只能指定捕获和冒泡这两个阶段,所以若同时指定两个阶段的回调函数,则会触发两次该监听函数;使用Element节点的on前缀属性只能是冒泡阶段
事件委托
利用事件冒泡的特性,为父元素阶段绑定一个事件,子元素触发事时该事件会冒泡到父元素上,所以相当于为每个子元素绑定了一个监听函数

Comments NOTHING