事件流
两个阶段
事件流,指的是事件完整执行过程中的流动路径
两个阶段,捕获和冒泡
事件捕获(一般不常用)
事件冒泡()
一个事件被触发的时候,同样的事件在该元素的祖先元素下依次触发,这一过程被叫做冒泡
阻止冒泡
目标,能够写出,阻止冒泡的代码
问题:因为默认有冒泡模式的存在,所以容易事件影响到父级元素
需求,限定在元素之内,阻止冒泡
前提,阻止事件冒泡,需要拿到事件对象
语法.事件对象.stopPropagation()
注意。此方法可以阻止事件流动传播,不光在冒泡事件有用,在捕获事件也有用
解绑事件
on事件方式,由于on事件为赋值的方式,直接使其等于null
对于addEventLister方式,必须使用 removeEventLister事件类型,事件处理函数获取捕获或者冒泡阶段
注,匿名函数无法被解绑
鼠标经过事件
mouseover和mouseout会有冒泡效果
mouseenter和mouseleave没有冒泡效果(推荐)
事件委托
优点:事件流的特征,解决一些实际技巧,减少注册次数,提高程序效率
原理:事件委托,其实使用了事件冒泡的特点
给父元素注册事件,触发子元素时,会冒泡到父元素身上,从而触发父元素事件
需要在监听事件中传递e,
e.target为选中元素
e.target.tagName判断标签的种类
1.4阻止冒泡
我们某些情况,要阻止默认行为的发生,比如阻止链接的跳转和表单域的跳转
阻止冒泡 e.stopPropagation()
阻止默认行为语法:e.preventDefault()