事件流:描述从页面中接收事件的顺序。
事件冒泡:事件先在被触发的元素上发生,然后,事件沿着DOM树向上传播,在每一级节点上都会发生,直至传播到document对象。
事件捕获:事件先在document上被触发,然后事件沿着DOM树以次向下,一直传播到事件的实际目标。
事件捕获/冒泡,通过addEventListener的第三个参数useCapture(Boolean)-默认flase设置,true代表捕获,false代表冒泡。
事件代理:利用事件冒泡机制,在父元素DOM上设置代理事件,子元素触发之时,用代理事件的默认参数:e,来获取究竟是哪一个元素触发了这个事件。
一些注意点:
e的常用属性:target,这个就是触发该事件的DOM。
target:target.parentNode可以得到这个DOM的父级DOM,但是肯定是不能得到子级DOM的(笑)
var oUl = document.getElementById("ul1");
oUl.onclick = function(ev){
var ev = ev || window.event; //分别支持ff和ie,其余浏览器两种方法都可以
var target = ev.target || ev.srcElement; //注释1
if(target.nodeName.toLowerCase() == 'li'){ //应该有个注释,但是我懂
alert(123);
alert(target.innerHTML);
}
}
}
注释1:ff下,只有target;ie下,只有srcElement属性,但这两个属性的作用相当。
最后给一个,先发生事件捕获,再发生事件冒泡。