# 事件对象

  1. event 就是一个事件对象,写道我们侦听函数的小括号里面,当形参看
  2. 事件对象只有有了事件才会存在,它是系统给我们自动创建的,不需要我们传递参数
  3. 事件对象是事件一系列相关数据的集合,跟事件相关的 比如鼠标点击就包含了鼠标坐标等信息
  4. 事件对象可以自己命名,比如 event, evt, e
  5. 事件对象也有兼容性问题,IE678 通过 window.event 兼容性的写法 : e = e || window.event

# 事件对象的常见属性和方法

事件对象属性方法说明
e.target返回触发事件的对象 标准
e.srcElement返回触发事件的对象 非标准 IE678 使用
e.type返回事件的类型,比如 click mouseover 不带 on
e.cancelBubble该属性阻止冒泡 非标准 IE678 使用
e.returnValue该属性组织默认事件 (默认行为) 非标准 IE678 使用,比如不让链接跳转
e.preventDefault()该方法组织默认事件 (默认行为) 标准 比如不让链接跳转
e.stopPropagation组织冒泡 标准
  • e.target 返回的是触发事件的对象 (元素), this 返回的是绑定事件的对象 (元素)
  • e.currentTarget 和 this 指向一致,都是返回绑定事件的对象

# 阻止冒泡的两种方式

  • 标准写法 : e.stopPropagation () 方法
  • 非标准写法 : e.cancelBubble = true;

# 事件委托

事件冒泡本身的属性,会带来坏处,也会带来好处

例:对于 li 的绑定事件,可以在 ul 上设置,然后利用其冒泡阶段,使用 e.target 来处理,就可以避免在每个 li 中都设置事件了

1
2
3
4
5
6
7
8
9
10
var ul = document.querySelector('ul');
ul.addEventListener('click', function (e) {
if (this !== e.target) {
for (var i = 0; i < this.children.length; i++) {
this.children[i].style.backgroundColor = '';
}

e.target.style.backgroundColor = 'pink';
}
})